我试图连接到centos 5.6中的rabbitmq-c,然后按照网站的步骤测试其在c客户端中的功能:http://www.rabbitmq.com/tutorials/tutorial-one-java.html。 但是,当我使用默认交换时它失败。在rabbitmq-c中使用默认交换
例如,我想通过名称为“(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客户端,我们刚刚设置的参数“交换”到“”告诉我们会发送消息到名为一样通过默认交换routingkey指定队列服务器。
那么我应该给c客户机中的第二个参数“交换”(使用默认交换)有什么价值?我试图将其设置为“”或“amq.direct”。它在运行时没有显示任何错误,并且看起来运行良好。
但是,当我检查rabbitmq-management(http:// localhost:55672 /#/队列)时,名为“myqueue”的队列不存在!
有人请指点我正确的方向?我真的很感激!
你真的创建了队列吗?因为只是发布到默认的交易所不会为你创建... – kzhen
感谢您的评论。但是[这里](http://www.rabbitmq。com/tutorials/tutorial-three-java.html)表示,“第一个参数是交换名称,空字符串表示默认或无名交换:消息通过routingKey指定的名称路由到队列,if它存在。“ 我误解了吗? – Hugo