每一个:
我是qpid的新手,遇到了一些问题。我创建的交换无法将消息路由到队列,如下所示:
首先,我在qpid中创建一个durbale队列"test-queue-1",使用quid-config命令:
qpid-config add queue test-queue-1 --durable
接下来,我在qpid中创建一个持久的直接交换"test-exchange-1",还使用qpid-config命令:
qpid-config add exchange direct test-exchange-1 --durable
最后,将它们绑定为以下命令:
qpid-config bind test-exchange-1 test-queue-1 test-queue-1
qpid工具中的一切似乎都很好:
Object Summary:
ID Created Destroyed Index
========================================================================================
128 12:28:28 - org.apache.qpid.broker:queue:qmfc-v2-hb-iZ23c6sri0pZ.12680.1
129 12:28:28 - org.apache.qpid.broker:queue:qmfc-v2-iZ23c6sri0pZ.12680.1
130 12:28:28 - org.apache.qpid.broker:queue:qmfc-v2-ui-iZ23c6sri0pZ.12680.1
131 12:28:28 - org.apache.qpid.broker:queue:reply-iZ23c6sri0pZ.12680.1
132 12:24:17 - org.apache.qpid.broker:queue:test-queue-1
133 12:28:28 - org.apache.qpid.broker:queue:topic-iZ23c6sri0pZ.12680.1
116 12:27:20 -
和
org.apache.qpid.broker:binding:org.apache.qpid.broker:exchange:test-exchange-1,org.apache.qpid.broker:queue:test-queue-1,test-queue-1
现在我已经准备好测试它们了,启动recv/send演示程序:
[devel@iZ23c6sri0pZ build]$ ./recv amqp://127.0.0.1/test-queue-1
发送消息:
[devel@iZ23c6sri0pZ build]$ ./send -a amqp://127.0.0.1/test-exchange-1 hi,everyone
但是"recv程序"无法接收任何消息。
如果我发送这样的消息:
[devel@iZ23c6sri0pZ build]$ ./send -a amqp://127.0.0.1/test-queue-1 hi,everyone
"recv程序"可以录制消息:
Address: amqp://127.0.0.1/test-queue-1
Subject: Hello Subject
Content: "hi,everyone"
谁能告诉我为什么?我阅读了amqp协议,可能消息中的路由密钥与绑定密钥不匹配,但如果是这样,我该如何设置路由密钥?我的recv/send由proton-c编写,版本0.8。qpidd是0.32版本。
当您将消息发送到qpid直接交换机时,它会根据消息的路由关键字被路由到绑定队列。在proton-c中,您可以通过使用功能设置消息主题来设置路由密钥
PN_EXTERN int pn_message_set_subject (pn_message_t* msg,const char* subject)
不幸的是,proton-c v0.8附带的示例send.c中没有实现这一点。您可以在此处插入以下行,并重建您的send
可执行
pn_message_set_subject(message, "my-routing-key");
您还可以添加一个新的命令行选项来接受并使用./send
中的路由密钥
java示例实现了一个-s
选项来设置消息主题。
我也认为这是一个绑定问题。
尝试绑定以下内容,qpid配置绑定test-exchange-1 test-queue-1 test-exchange-1
@冯芳:"test-exchange-1"是一个路由密钥,它是你在发送消息时使用的。如果没有尝试"test-exchange-1/test-exchange-1"
保持原样休息,尝试一下。
我希望这能有所帮助!