SimpleAmqpClient Channel::basicConclusion(),如何从RabbitMQ获取所有消息

kq4fsx7k  于 2023-10-20  发布在  RabbitMQ
关注(0)|答案(2)|浏览(164)

这是一个非常基本的问题,我把它分成两部分
用例:我正在编写一个c++应用程序,它需要与运行在服务器上的RabbitMQ进行通信。目前,我可以在队列上发布消息,并从队列中消费消息(如果队列中有n条消息,则只消费一条消息)。
正如我从basicConclusion()方法的描述中所读到的那样,“开始在队列上消费基本消息”作为消费者订阅队列,因此队列上的所有未来消息都将是基本消息。
所以每当我对我的队列执行basicConclusion()时,所有的消息都会传递给我(在服务器上,我的队列是空的),
我在做一些

#include <SimpleAmqpClient/SimpleAmqpClient.h>
#include<iostream>
#include<string>
using namespace std;
using namespace AmqpClient;

int main()
{
    Channel::ptr_t connection = Channel::Create("ip",5672,usename,password);

    const std::string body("Test Message3");
    BasicMessage::ptr_t out_message = BasicMessage::Create(body);
//code to publish , works fine 
//connection->BasicPublish("exchange", "key",BasicMessage::Create("Message1"));

//BasicConsume say we have 5 messages in my queue
string consumer_tag=connection->BasicConsume("queue","");

Envelope::ptr_t envelope = connection->BasicConsumeMessage(consumer_tag);
        connection->BasicAck(envelope->GetDeliveryInfo());
        BasicMessage::ptr_t bodyBasicMessage=envelope->Message();
        string messageBody=bodyBasicMessage->Body();
        cout<<"message  body : "<<messageBody<<endl;
}

我只能读取队列中的第一条消息。
问:
1.我怎样才能让一个C消费者持续监听我队列,只要有消息应用程序就会消费它(托管一个c应用程序/使用线程/使用无限循环)我没有任何线程或托管一个c++应用程序的经验(目前我只限于可执行文件),所以任何建议的读取都是最受欢迎的。
1.我如何阅读其余4条正在删除的消息。
非常感谢。

am46iovg

am46iovg1#

感谢@Luke的回复。我解决了我的问题,通过做下面的basicconcept与noAck设置为假-> basicConsumeMessage内的无限循环,其次是一个basicAck()通过这样做,我的应用程序等待消费从队列(不打破时,没有消息在队列中)和队列不给我发送下一个消息,直到它收到ACK的第一个。
现在我打算把它作为一个守护进程,所以关闭终端不会影响执行。
任何其他建议都是非常欢迎的。

k2arahey

k2arahey2#

根据以下问题,您必须通过调用BasicConsumeMessage-https://github.com/alanxz/SimpleAmqpClient/issues/162来使用每条消息
此库不支持异步回调。

相关问题