如何在Apache Qpid中使用amq.topic来发布/发送消息

时间:2011-09-21 14:44:22

标签: jms amqp qpid

我有一个C ++发布者来发送这样的消息:

Connection connection;
connection.open("127.0.0.1", 5672);
Session session = connection.createSession();
Message msg;
msg.setData("TestAMsg");
msg.getDeliveryProperties().setRoutingKey("test.A");
session.messageTransfer(arg::content = message, 
                         arg::destination = "amq.topic");
msg.setData("TestBMsg");
msg.getDeliveryProperties().setRoutingKey("test.B");
session.messageTransfer(arg::content = message, 
                         arg::destination = "amq.topic");

我有一个像这样的Java用户:

AMQConnectionFactory connectionFactory = new 
                AMQConnectionFactory("amqp://guest:guest@myhost/test?
                                     brokerlist='tcp://127.0.0.1:5672'");
AMQConnection connection = (AMQConnection) 
                             connectionFactory.createConnection();
org.apache.qpid.jms.Session session = connection.createSession(false, 
                                             Session.AUTO_ACKNOWLEDGE);
AMQTopic destination = (AMQTopic) 
        AMQDestination.createDestination("topic://amq.topic//exclusive='false'?
                                          bindingkey='Test.A'");
MessageConsumer messageAConsumer = session.createConsumer(destination);
Message message_ = messageConsumer_.receive();

上述代码中未收到任何消息。我很困惑这是如何工作的?消费者的bingding URL的正确形式是什么?我错过了什么?

2 个答案:

答案 0 :(得分:2)

您的消费者指定的绑定密钥与生产者使用的路由密钥不同。

您的制作人代码:

msg.getDeliveryProperties().setRoutingKey("test.A");

您的消费者代码:

AMQTopic destination = (AMQTopic) 
        AMQDestination.createDestination("topic://amq.topic//exclusive='false'?
                                          bindingkey='Test.A'");

注意每个键的第一个字符的区别。您的制作人使用test.A而您的消费者使用Test.A,并且由于这些键区分大小写,因此它们被视为完全不同。这就是为什么你的制作人不会得到任何消息。

答案 1 :(得分:0)