gpt4 book ai didi

c - 在 rabbitmq-c 中使用默认交换

转载 作者:太空狗 更新时间:2023-10-29 15:04:27 27 4
gpt4 key购买 nike

我正在尝试连接到 centos 5.6 中的 rabbitmq-c,并按照网站的步骤在 c 客户端中测试其功能:http://www.rabbitmq.com/tutorials/tutorial-one-java.html .但是,当我使用默认交换时它失败了。

例如,我想通过名称为“(AMQP default)”的默认交换器将消息“Hello world”发送到名为“myqueue”的队列。

在java中,代码如下:

channel.basicPublish("", QUEUE_NAME, null, message.getBytes());

但在 c 中,当我运行 rmq_new_task.c(几乎与 amqp_sendstring.c 相同)时,如 https://github.com/liuhaobupt/rabbitmq_work_queues_demo-with-rabbit-c-client-lib 上的示例.

queuename="myqueue";
......
die_on_error(amqp_basic_publish(conn, amqp_cstring_bytes(exchange),
amqp_cstring_bytes(routingkey), &props, amqp_cstring_bytes("Hello world")),
"Publishing");

在java客户端中,我们只是将参数“exchange”设置为“”来告诉服务器我们将通过默认交换将消息发送到与routingkey同名的指定队列。

那么我应该给c客户端中的第二个参数“exchange”取什么值(使用默认的exchange)?我试图将其设置为“”或“amq.direct”。它在运行时没有显示任何错误并且看起来运行良好。

但是,当我查看rabbitmq-management(http://localhost:55672/#/queues)时,名为“myqueue”的队列并不存在!

有人能给我指出正确的方向吗?我真的很感激!

最佳答案

看看http://www.rabbitmq.com/tutorials/amqp-concepts.html并专门查找标题为 Default Exchange 的部分。

default exchange的用法非常简单。

在 java 中你会这样做:

channel.basicPublish("", "hello", null, message.getBytes());

通过在 "" 中指定使用默认交换。 (应该不需要使用amq.direct)

根据上面的文章,它指出:

The default exchange is a direct exchange with no name (empty string) pre-declared by the broker. It has one special property that makes it very useful for simple applications: every queue that is created is automatically bound to it with a routing key which is the same as the queue name.

这意味着只有当您已经创建了您要发布到的队列时,才能发布到默认交换器。

因此,您需要先创建队列,然后才能发布到默认交换器。完成后,您将开始看到您的消息。

关于c - 在 rabbitmq-c 中使用默认交换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13641069/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com