【问题标题】:about qpid exchange,queue关于 qpid 交换,队列
【发布时间】:2015-06-10 21:18:54
【问题描述】:

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

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

但“接收程序”无法接收任何消息。
如果我发送这样的消息:

[devel@iZ23c6sri0pZ build]$ ./send -a amqp://127.0.0.1/test-queue-1 hi,everyone

“接收程序”可以接收消息:

Address: amqp://127.0.0.1/test-queue-1
Subject: Hello Subject
Content: "hi,everyone"

谁能告诉我为什么?我阅读了amqp协议,可能消息中的routing-key与binding-key不匹配,但是如果是这样,我该如何设置routing-key? 我的接收/发送由 proton-c 编写,版本 0.8。 qpidd 是 0.32 版本。

【问题讨论】:

    标签: c apache qpid


    【解决方案1】:

    我也认为这是一个约束性问题。

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

    @Feng Fang:“test-exchange-1”是你在发送消息时使用的路由键。如果那不尝试使用“test-exchange-1/test-exchange-1”

    保持原样休息并尝试一下。

    我希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      当您将消息发送到 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 选项来设置消息主题。

      【讨论】:

        猜你喜欢
        • 2018-10-28
        • 2011-04-22
        • 2012-02-20
        • 1970-01-01
        • 2012-12-13
        • 2018-03-30
        • 2019-06-25
        • 2012-06-28
        • 1970-01-01
        相关资源
        最近更新 更多