RabbitMQ C ++客户端consumer_cancel_notify

时间:2014-03-11 12:37:44

标签: rabbitmq

遵循指南here我可以为我的客户端连接设置“consumer_cancel_notify”属性,但是当删除队列时,客户端仍然没有注意到。我猜我可能必须覆盖某些方法或在某处设置回调,但在深入挖掘源代码之后,我迷失了我在哪里做到这一点。有人随便知道我在哪里听这个通知吗?

1 个答案:

答案 0 :(得分:0)

好的,我的工作方式如下:

  1. 创建队列时(即“声明”队列),添加“AMQP_CANCEL”消息的回调。
  2. 在AMQPQueue :: sendConsumeCommand()内部,在while(1)循环内,代码检查不同的* frame.payload.method.id * s,添加对AMQP_BASIC_CANCEL_METHOD的检查,例如

        if (frame.payload.method.id == AMQP_BASIC_CANCEL_METHOD){
            cout << "AMQP_BASIC_CANCEL_METHOD received" << endl;
            if ( events.find(AMQP_CANCEL) != events.end() ) {
               (*events[AMQP_CANCEL])(pmessage);
            }
            continue;
        }
    
  3. 就是这样。

    出于我的目的,我想重新声明队列,如果它被删除,以便我可以继续消费消息,所以在我的回调中我只是重新声明队列,设置绑定,添加事件,设置消费者标签,并消耗。