是否有任何选项可以在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