如何使用Apache Camel从ActiveMQ主题读取旧的入队消息

时间:2019-07-07 16:18:24

标签: apache-camel jms activemq

我有Apache Camel客户端(消费者),该客户端监听来自远程ActiveMQ主题的消息,我观察到它仅在Consumer运行时读取消息。

如果消费者没有在听,而生产者发送消息,则他们将永远被排队,并由消费者选择。

我希望我的客户在启动后应该阅读所有排队的消息

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.6.RELEASE</version>
    <relativePath /> <!-- lookup parent from repository -->
</parent>

<properties>
    <java.version>1.8</java.version>
</properties>

<dependencies>
    <!-- Gson dependency -->
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

以下是路由器代码

    public static void main(String[] args) throws Exception
    {
        ActiveMQComponent amq = new ActiveMQComponent();
        amq.setConnectionFactory( new ActiveMQConnectionFactory() );
        amq.setUsername("admin");
        amq.setPassword("admin");
        amq.setBrokerURL("tcp://localhost:8161");

        Main main = new Main();
        main.bind("activemq", amq);
        main.addRouteBuilder(new MyRouter());
        main.run(args);
    }

ActiveMQ = 5.15.9 ApacheCamel = 2.24.1

enter image description here

1 个答案:

答案 0 :(得分:2)

如果您不使用持久订阅,并且向没有订阅者的主题发送消息,则该消息实质上将被丢弃,不再可见。仅当存在具有脱机订阅者的持久订阅并且该消息被标记为持久性时,代理才会存储主题消息。

如果您希望访问使用方关闭时发送的消息,则需要确保这些使用方至少运行了一次并创建了持久主题订阅。