【发布时间】:2017-06-02 15:42:55
【问题描述】:
我有一个 activemq 配置,其中我有一个虚拟目标和一个普通主题
我想根据消息头中的 JMSType 将所有 JMS 消息路由到目的地(VirtualTopic.Notifications)到 2 个队列(VirtualTopic.SMS、VirtualTopic.EMAIL)。
我希望正常的 Topic(VirtualTopic.gps) 像往常一样工作。
这是我对activemq.xml的配置。此处创建了 Consumer.SMS.VirtualTopic 和 Consumer.EMAIL.VirtualTopic。
<destinations>
<queue physicalName="Consumer.SMS.VirtualTopic" />
<queue physicalName="Consumer.EMAIL.VirtualTopic" />
</destinations>
<destinationInterceptors>
<virtualDestinationInterceptor>
<virtualDestinations>
<compositeQueue name="VirtualTopic.Notifications" forwardOnly="false">
<forwardTo>
<filteredDestination selector="JMSType = 'SMS'" queue="Consumer.SMS.VirtualTopic"/>
<filteredDestination selector="JMSType = 'EMAIL'" queue="Consumer.EMAIL.VirtualTopic"/>
</forwardTo>
</compositeQueue>
</virtualDestinations>
</virtualDestinationInterceptor>
</destinationInterceptors>
虽然消费者和主题 (VirtualTopic.gps) 是从服务器端代码创建的。
private static MessageProducer getTopicProducer(String topicName) throws JMSException {
MessageProducer producer = topicProducers.get(topicName);
if (producer == null) {
logger.info("Creating message producer for Topic : {}", topicName);
Destination destination = session.createTopic(topicName);
List<String> queueNames = PropertyReader
.getPropertyStringList("jms.topic.consumer.list", JMSProducer.properties);
if (queueNames != null) {
for (String queueName : queueNames) {
Queue virtualQueue = session.createQueue(queueName);
MessageConsumer con = session.createConsumer(virtualQueue);
con.close();
}
}
producer = session.createProducer(destination);
topicProducers.put(topicName, producer);
}
return producer;
}
到 VirtualTopic.Notifications 的所有消息都被路由到 2 个不同的队列,消费者可以从各自的队列中获取消息
但问题是所有发送到 VirtualTopic.gps 的消息都被过滤了,消费者无法消费 gps 消息。
【问题讨论】:
-
首先;您正在谈论主题,但我在您的配置中没有看到任何主题,您的所有目的地都是队列的,要使用主题,您必须使用
更新您的配置并使用 -
关于您谈论哪个消费者的目的地? 但其他主题的消费者没有收到消息。
-
恢复到哪个配置?? 当我恢复我的配置时,除了 SMS 之外的主题的消费者,EMAIL 正在工作。
-
Hassen Bennour:嘿,我的意思是所有消息都通过
并被过滤。但所需的行为应该类似于发布到 VirtualTopic 的消息。通知应该过滤到 SMS 和 EMAILS。我还有一个主题 VirtualTopic.gps 消费者没有收到消息 -
你是如何配置这个 VirtualTopic.gps 的?您将消息作为目的地发送给它?
标签: activemq messagebroker jms-topic virtual-topic