我使用的是rabbitmq-c库,在c++中创建一个消费者去持续监听model_1队列
时间: 2024-06-09 10:07:39 浏览: 134
C++ windows版 多生产者多消费者的队列实现
3星 · 编辑精心推荐
好的,你可以参考以下代码来创建一个消费者去持续监听model_1队列:
```c++
#include <amqp.h>
#include <amqp_framing.h>
#include <amqp_tcp_socket.h>
int main(int argc, char const *const *const argv) {
amqp_connection_state_t conn = amqp_new_connection();
amqp_socket_t *socket = amqp_tcp_socket_new(conn);
amqp_socket_open(socket, "localhost", 5672);
amqp_login(conn, "/", 0, 131072, 0, AMQP_SASL_METHOD_PLAIN, "guest", "guest");
amqp_channel_open(conn, 1);
amqp_queue_declare_ok_t *r = amqp_queue_declare(
conn, 1, amqp_cstring_bytes("model_1"), 0, 0, 0, 1, amqp_empty_table);
amqp_bytes_t consumer_tag = amqp_cstring_bytes("my_consumer");
amqp_basic_consume(conn, 1, amqp_cstring_bytes("model_1"), consumer_tag, 0, 1, 0,
amqp_empty_table);
while (1) {
amqp_envelope_t envelope;
amqp_maybe_release_buffers(conn);
int result = amqp_consume_message(conn, &envelope, NULL, 0);
if (AMQP_RESPONSE_NORMAL != result) {
continue;
}
std::string message((char *)envelope.message.body.bytes,
(char *)envelope.message.body.bytes + envelope.message.body.len);
std::cout << "Received message: " << message << std::endl;
amqp_destroy_envelope(&envelope);
}
amqp_channel_close(conn, 1, AMQP_REPLY_SUCCESS);
amqp_connection_close(conn, AMQP_REPLY_SUCCESS);
amqp_destroy_connection(conn);
return 0;
}
```
这段代码使用了rabbitmq-c库,首先创建了一个连接和一个TCP socket,然后登录到RabbitMQ服务器,打开一个channel并且声明一个名为model_1的队列。接着,我们使用amqp_basic_consume方法来启动消费者,它会一直阻塞并等待新的消息到来。当消息到来时,我们可以使用amqp_envelope_t结构体来访问消息的内容。在这里,我们简单地打印出收到的消息内容,并且释放envelope来释放内存。最后,我们关闭channel和连接并销毁它们。
希望这个例子对你有帮助!
阅读全文