我打算将 RabbitMQ 用于一个项目,在该项目中,我需要在队列中每隔几秒就知道我的任务的位置。
假设我使用它来生成报告,如果有一个队列,那么我想在任务实际开始之前向用户显示他在队列中的位置。
这是我可以通过 RabbitMQ 实现的吗?
我打算将 RabbitMQ 用于一个项目,在该项目中,我需要在队列中每隔几秒就知道我的任务的位置。
假设我使用它来生成报告,如果有一个队列,那么我想在任务实际开始之前向用户显示他在队列中的位置。
这是我可以通过 RabbitMQ 实现的吗?
在 RabbitMQ 的队列中无法获取消息位置。事实上,它根本与 AMQP 协议无关。
作为实现您想要的解决方法,您可以在发布时将消息 ID 添加到某些存储,例如 MySQL 数据库,然后在使用时将其从那里删除。然后,您可以查询该数据以获取所需的指标。
您可以使用具有唯一标识符的 json 编码字符串发送消息,通过 RabbitMQ api 访问未处理队列数据的列表,解码消息并执行您的神奇操作,例如计算特定任务位置。
以下是使用 PHP curl 检索队列列表的示例
// create php curl
$ch = curl_init();
$queue_titile = "hallo";
$url = "http://localhost::15672/#/api/queues/%2F/$queue_titile/get";
// define post data
$post_data = '{"vhost":"/","name":"'.$queue_titile.'","truncate":"'.$limit.'","requeue":"true","encoding":"auto","count":"'.$limit.'"}';
// set curl configuration
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, 'guest:guest');
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
// send curl request
$response = curl_exec($ch);
// close curl connection
curl_close($ch);
// decode json response
$response = json_decode($response);