首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用rabbitmq-c中的默认交换

使用rabbitmq-c中的默认交换
EN

Stack Overflow用户
提问于 2012-11-30 15:53:49
回答 1查看 8.9K关注 0票数 5

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

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

在java中,代码如下:

代码语言:javascript
复制
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上运行示例。

代码语言:javascript
复制
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“的队列并不存在!

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-05 18:23:38

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

默认交换的用法非常简单。

在java中,你可以这样做:

代码语言:javascript
复制
channel.basicPublish("", "hello", null, message.getBytes());

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

根据上面的文章,它声明:

默认交换是没有由代理预先声明的名称(空字符串)的直接交换。它有一个特殊的属性,这使得它对于简单的应用程序非常有用:创建的每个队列都会自动绑定一个与队列名称相同的路由键。

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

因此,您需要先创建队列,然后才能发布到默认exchange。一旦你这样做了,你就会开始看到你的消息。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13641069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档