2011-09-21 35 views
1

我有一個C++出版商發送消息是這樣的:如何使用amq.topic在阿帕奇的pub/sub消息Qpid

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:[email protected]/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(); 

上面的代碼沒有收到消息。我很困惑這將如何工作?對於消費者來說,什麼是綁定URL的正確形式?我錯過了什麼?

回答

2

您的使用者指定了與生產者使用的路由鍵不同的綁定鍵。

您的生產代碼:

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

你的消費代碼:

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

通知每個鍵的第一個字符的情況下的差異。您的製作人使用test.A,您的消費者使用Test.A,由於這些密鑰區分大小寫,因此它們被認爲完全不同。這就是你的製片人不會收到任何信息的原因。