我使用Apache Artemis作为消息总线,并使用JMS侦听消息并将消息发送到消息总线。我有一个用例,我想听所有与模式匹配的队列(例如,主题以xxxx开头)。根据我所探索的内容,我们可以使用通配符路由来做到这一点。
http://activemq.apache.org/wildcards.html
我已经在我的broker.xml中放入了以下内容
<wildcard-addresses>
<routing-enabled>true</routing-enabled>
</wildcard-addresses>
我正在使用以下代码将消息发送到队列:
@Component
@EnableJms
public class Producer {
@Autowired
JmsTemplate jmsTemplate;
@Value("address.client1")
String destinationQueue;
public void send(String msg){
jmsTemplate.convertAndSend(destinationQueue, msg);
}
}
下面是我的侦听器,应该侦听所有以address开头的队列。
@Component
public class Consumer {
@JmsListener(destination = "address.>")
public void receive(Message message){
if(message.getPayload() instanceof String){
System.out.println("Recieved Message: " + message.getPayload().toString());
}else {
System.err.println("Message Type Unkown !");
}
}
}
但是我无法接收我们从发送方发送到接收方代码的消息。谁可以帮我这个事?
最佳答案
您在问题中链接的文档适用于ActiveMQ 5.x,而不适用于ActiveMQ Artemis。用于通配符的ActiveMQ Artemis文档为here。
使用者的问题在于您使用了错误的语法。它正在使用address.>
。您可以在Artemis中更改通配符语法配置,例如:
<wildcard-addresses>
<routing-enabled>true</routing-enabled>
<any-words>></any-words>
</wildcard-addresses>
或者,您可以使用默认Artemis配置中的功能等效的语法,即
address.#
。