我有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
答案 0 :(得分:2)
如果您不使用持久订阅,并且向没有订阅者的主题发送消息,则该消息实质上将被丢弃,不再可见。仅当存在具有脱机订阅者的持久订阅并且该消息被标记为持久性时,代理才会存储主题消息。
如果您希望访问使用方关闭时发送的消息,则需要确保这些使用方至少运行了一次并创建了持久主题订阅。