关于qpid交换,队列

时间:2015-04-06 13:04:46

标签: c apache qpid

每一个人:
  我是qpid的新手,遇到了一些问题。我创建的交换无法将消息路由到队列,如下所示:
  首先我在qpid中创建一个durbale队列“test-queue-1”,使用quid-config命令:

qpid-config add queue test-queue-1 --durable  

接下来我创建一个持久的直接交换“test-exchange-1"在qpid中也使用qpid-config命令:

qpid-config add exchange direct test-exchange-1 --durable

最后一个,将它们绑定为以下命令:

qpid-config bind test-exchange-1 test-queue-1 test-queue-1

qpid-tool中的一切似乎都可以:

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版本。

2 个答案:

答案 0 :(得分:0)

当您向qpid直接交换发送消息时,它将根据消息的路由密钥路由到绑定队列。在proton -c中,您可以通过使用函数

设置消息主题来设置路由键
PN_EXTERN int pn_message_set_subject (pn_message_t* msg,const char* subject)

不幸的是,在proton-c v0.8附带的示例send.c中没有实现这一点。您可以插入以下行somewhere around here并重建send可执行文件

pn_message_set_subject(message, "my-routing-key");

您还可以付出一些努力,添加一个新的命令行选项来接受和使用来自./send的路由键

java示例实现了一个-s选项来设置邮件主题。

答案 1 :(得分:0)

我也认为这是一个具有约束力的问题。

尝试使用以下方式绑定, qpid-config bind test-exchange-1 test-queue-1 test-exchange-1

@Feng Fang:“test-exchange-1”是您在发送消息时使用的路由密钥。如果没有尝试“test-exchange-1 / test-exchange-1”

保持原样休息并试一试。

我希望这有帮助!