1

我打算将 RabbitMQ 用于一个项目,在该项目中,我需要在队列中每隔几秒就知道我的任务的位置。

假设我使用它来生成报告,如果有一个队列,那么我想在任务实际开始之前向用户显示他在队列中的位置。

这是我可以通过 RabbitMQ 实现的吗?

4

2 回答 2

3

在 RabbitMQ 的队列中无法获取消息位置。事实上,它根本与 AMQP 协议无关。

作为实现您想要的解决方法,您可以在发布时将消息 ID 添加到某些存储,例如 MySQL 数据库,然后在使用时将其从那里删除。然后,您可以查询该数据以获取所需的指标。

于 2014-11-03T12:19:56.663 回答
1

您可以使用具有唯一标识符的 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);
于 2015-08-13T08:48:02.243 回答