我使用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>&gt;</any-words>
</wildcard-addresses>


或者,您可以使用默认Artemis配置中的功能等效的语法,即address.#

10-06 09:08