Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将ActiveMQ Artemis路由类型、Spring Boot JmsListener设置为客户端_Jms_Spring Jms_Activemq Artemis - Fatal编程技术网

将ActiveMQ Artemis路由类型、Spring Boot JmsListener设置为客户端

将ActiveMQ Artemis路由类型、Spring Boot JmsListener设置为客户端,jms,spring-jms,activemq-artemis,Jms,Spring Jms,Activemq Artemis,我已经使用ActiveMQ Artemis一年多了。到目前为止,我的要求是保留消息。比如订单、电子邮件、供应商更新。。。因此,我已经明确地创建了一个地址,并在其下为每个消费者创建了一个队列。这样,即使生产商和消费者都关闭了,我也不会失去待定订单 我的新案例基本上是相反的。我有来自web套接字的大量数据。我需要过滤这个,并在Artemis上提供它。优选地,客户端可以订阅地址并基于其提供的消息选择器接收消息。例如,这里有两个我正在使用Spring Boot进行试验的客户端 @JmsListener(

我已经使用ActiveMQ Artemis一年多了。到目前为止,我的要求是保留消息。比如订单、电子邮件、供应商更新。。。因此,我已经明确地创建了一个地址,并在其下为每个消费者创建了一个队列。这样,即使生产商和消费者都关闭了,我也不会失去待定订单

我的新案例基本上是相反的。我有来自web套接字的大量数据。我需要过滤这个,并在Artemis上提供它。优选地,客户端可以订阅地址并基于其提供的消息选择器接收消息。例如,这里有两个我正在使用Spring Boot进行试验的客户端

@JmsListener(destination="price.address::price.2.queue", selector="JMSType='test'")
public void testReceiver1(String msg) {
    System.out.println("1 " + msg); 
}
@JmsListener(destination="price.address::price.2.queue")
public void testReceiver2(String msg) {
    System.out.println("2 " + msg); 
}
理想情况下,这两个客户机/侦听器应该能够使用anycast进行订阅,以便其中一个或两个都可以指定选择器并获取这些消息

但当它们连接时,会创建选播队列。因此,我尝试将地址添加到我的经纪人中,如下所示:

  <addresses>
    <address name="price.address">
            <multicast/>
    </address>
  </addresses>

这似乎没什么作用。将创建选播队列

我还尝试将两个侦听器设置为直接指向主题/地址(不使用FQQN),但仍然会出现一个选播路由类型——一个名为“price.address”的队列

我不确定所有这些数据最终将如何使用,所以我试图尽可能灵活地提供。我知道大部分都不会被使用,至少暂时不会

我还有一个项目,大部分传入数据都没有被使用。我设置了一个地址和带有过滤器的显式队列,每个需要过滤数据的客户机一个。这很好,但现在的区别是,我需要客户端能够连接并为它们需要的数据指定过滤器(选择器),并且只接收新的传入消息

我不确定这是JMS客户机的Artemis问题还是Sprint Boot@JmsListener问题

阿耳特弥斯2.17
Spring Boot 2.5

假设您希望客户端能够连接并:

  • 为所需的数据指定选择器
  • 只接收新的传入消息
这意味着您希望使用JMS主题

但是,您的
@JmsListener
定义使用的是JMS队列,因为默认情况下它们使用的是JMS队列。请参阅,了解有关如何使他们使用JMS主题的详细信息

由于您的
@JmsListener
定义使用的是JMS队列,因此代理将自动创建并使用选播资源。这就是为什么无论在代理上更改什么配置,您都会看到相同的行为

最终,您不需要在
broker.xml
中定义任何
地址
队列
。只要客户机使用正确类型的JMS资源,所有代理端资源都将自动创建。另外,您的
@JmsListener
定义应该只使用地址名,而不是FQQN