是否有任何選項可以在Apache Qpid的消息級別設置路由密鑰。 我現在的做法是Apache Qpid - 在消息級別設置路由密鑰
在地址字符串中指定路由鍵。用這個目的地址創建一個製作人。
topic =(Topic)context.lookup(「destination」); sender = session.createProducer(topic);
通過製作人發送消息。
這樣所有的消息都有相同的路由密鑰。我想實現的是爲每個消息分別設置一個路由鍵。
讓我知道這是可以做到
是否有任何選項可以在Apache Qpid的消息級別設置路由密鑰。 我現在的做法是Apache Qpid - 在消息級別設置路由密鑰
在地址字符串中指定路由鍵。用這個目的地址創建一個製作人。
topic =(Topic)context.lookup(「destination」); sender = session.createProducer(topic);
通過製作人發送消息。
這樣所有的消息都有相同的路由密鑰。我想實現的是爲每個消息分別設置一個路由鍵。
讓我知道這是可以做到
這可以通過指定每個消息主題輕鬆完成。 由Qpid地址方案定義的「主題」將在使用0-10協議時映射到主題的路由鍵。
Message m = ssn.createMessage();
m.setStringProperty("qpid.subject", "my-subject");
prod.send(m);
這使您可以使用標準的JMS接口,同時仍然使用Qpid附加組件。
我第一次嘗試這樣做:
Message message = session.createTextMessage("test");
AMQMessageDelegate_0_10 delegate = (AMQMessageDelegate_0_10) ((AbstractJMSMessage)message).getDelegate();
delegate.getDeliveryProperties().setRoutingKey("rk1");
但在發送郵件,它仍然是在我的目的地設置路由的關鍵。
看Qpid的Java源代碼,我不確定這是目前可能的。如果你看一下https://svn.apache.org/repos/asf/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/BasicMessageProducer_0_10.java,你會看到這樣的代碼:
String routingKey = destination.getRoutingKey().toString();
if (deliveryProp.getRoutingKey() == null || ! deliveryProp.getRoutingKey().equals(routingKey))
{
deliveryProp.setRoutingKey(routingKey);
}
這不幸似乎意味着,即使你設置你的消息的路由鍵,將通過目的地的路由鍵取代,如果該消息的路由密鑰與目的地的路由密鑰不同。
可能有一種方法可以做到這一點,但是我不太熟悉Qpid的Java方面。您最好的選擇可能是在Qpid用戶郵件列表上詢問(有關信息,請參閱http://qpid.apache.org/mailing_lists.html)。
您可以將setJMSReplyTo(「address」)設置爲路由密鑰。 我用它在需要的響應頻道上獲得回覆。
您應該能夠使用AMQP主題實現您想要的功能。將routingKey設置爲諸如「my-topic」之類的內容。將您的消費者設置爲與設計的不同主題,例如「主題-1」,「主題-2」,...
對於製作者,他們每個人都可以發送具有不同主題的消息,例如「my-topic .subject-1「,」my-topic.subject-2「,...將這些用作生產者的路由密鑰。
示例代碼如下所示:
//set up message consumer for "subject-1"
AMQTopic topic-1 = new AMQTopic(new AMQShortString("amq.topic"), new AMQShortString("my-topic.subject-1), false, null, true);
MessageConsumer consumer = session.createConsumer(topic-1);
Message message = consumer.receive();
...
//set up message producer for "subject-1"
MessageProducer producer = session.createProducer(topic-1);
producer.send(session.createTextMessage("my message"));
這樣你也可以建立一個消費者接收所有發送到「我的話題」的消息,以及使用「我的話題*。 「作爲其路由鍵。 在Qpid文檔中查看更多詳細信息,請參見「Apache-Qpid編程」
我也可以在Qpid測試用例中找到支持測試用例。將嘗試並回來 – ManojGumber 2012-02-15 05:27:21