如何接收在artemis控制台中创建的多播类型队列消息

时间:2020-06-06 19:37:24

标签: activemq-artemis

  1. 下载Artemis2.13.0,预先创建一个多播地址测试,然后在该地址上创建一个多播队列123,使用控制台向123队列发送1条消息

  2. 使用IDEA创建springboot项目,pom文件导入以下依赖项

    <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-artemis</artifactId>
            </dependency>
    
            <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jms</artifactId>
            <version>5.2.5.RELEASE</version>
            <scope>compile</scope>
        </dependency>
    
    
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>artemis-jms-client</artifactId>
            <version>2.13.0</version>
            <scope>compile</scope>
        </dependency>
    
  3. pplication.properties添加配置

    spring.artemis.mode=native
    spring.artemis.host=localhost
    spring.artemis.port=61616
    spring.artemis.user=test
    spring.artemis.password=123456
    
    spring.jms.pub-sub-domain=true
    
  4. 创建使用者以接收队列123中预先创建的消息

    import org.springframework.jms.annotation.JmsListener;
    import org.springframework.stereotype.Component;
    
    @Component
    public class Consumer{
        @JmsListener(destination="test::123")
        public void consumerMessage(String text){
            System.out.println("从queue队列收到的回复信息为:"+text);
        }
    
    }
    
  5. 我无法收到消息,使用2.13.0 artemis-jms-client会出现以下错误消息

    Setup of JMS message listener invoker failed for destination 'test::123' - trying to recover. Cause: AMQ229019: Queue 123 already exists on address test
    
  6. 使用IDEA无需任何修改即可直接创建新的springboot项目。

  7. Artemis创建服务器,并且不修改代理文件。

1 个答案:

答案 0 :(得分:0)

为JMS用例预先创建一个多播队列是很不正常的。通常,您只需在应用程序中使用地址名称作为JMS主题的名称,然后代理将在地址上自动创建一个队列以表示应用程序的JMS订阅,然后应用程序将接收发送到该队列的任何消息。地址。在the documentation中进一步讨论了将JMS概念映射到核心代理实现的语义。

但是,如果您的用例强迫您要预先创建多播队列,则可以使用遵循{{}形式的标准队列名称(即FQQN)来访问该队列。 1}}。因此,在您的情况下,您可以使用<address>::<queue>,例如:

test::123

FQQN语法和功能在the documentation中有进一步讨论。

对于它的价值,我修改了ActiveMQ Artemis附带的spring-boot-integration示例,以使用普通的JMS客户端(即,不是AMQP JMS客户端),并使用FQQN和多播队列,并且一切正常。