带有 Spring Boot 的 Artemis Cluster 的持久订阅
Durable subscription for Artemis Cluster with Springboot
我已经创建了带有 2 个节点的 Artemis 集群并成功连接到我的 Spring-boot 应用程序(github link), implementation is based on clustered-static-discovery
现在我正在用它测试持久订阅有一些奇怪的行为
我正在生产 5 味精,只消耗 3
@Bean
public MessageListenerContainer listenerContainer1(@Qualifier("connectionFactory") ConnectionFactory connectionFactory, Consumer consumer, SimpleMessageConverter messageConverter, @Qualifier("topic") Topic topic) {
DefaultMessageListenerContainer defaultMessageListenerContainer =
new DefaultMessageListenerContainer();
@Bean("connectionFactory")
public ConnectionFactory activeMQJMSConnectionFactory(@Qualifier("amqTransportConfiguration") TransportConfiguration transportConfiguration) throws JMSException {
ActiveMQJMSConnectionFactory activeMQJMSConnectionFactory =
new ActiveMQJMSConnectionFactory( false, transportConfiguration);
activeMQJMSConnectionFactory.setPassword("admin");
activeMQJMSConnectionFactory.setUser("admin");
activeMQJMSConnectionFactory.setClientID("admin");
return activeMQJMSConnectionFactory;
}
defaultMessageListenerContainer.setConnectionFactory(connectionFactory);
defaultMessageListenerContainer.setDestination(topic);
defaultMessageListenerContainer.setMessageListener(consumer);
defaultMessageListenerContainer.setSessionAcknowledgeMode(1);
defaultMessageListenerContainer.setSubscriptionName("mySub");
defaultMessageListenerContainer.setSubscriptionDurable(true);
defaultMessageListenerContainer.setMessageConverter(messageConverter);
return defaultMessageListenerContainer;
}
这里是完整的config
我已经完成 http://localhost:816i/hawtio/ wrb UI for artemis 并且发现生产者只收到 5 条消息中的 5 条
(消息负载平衡 -> 严格)
我做错了什么?
看来问题出在代码上。两个不同的持久订阅共享相同的持久订阅名称。在为每个 MessageListenerContainer
实例使用唯一的订阅名称后,我能够通过您的测试:
//listener container (1)
defaultMessageListenerContainer.setDurableSubscriptionName("sub1");
/* --- */
//listener container (2)
defaultMessageListenerContainer.setDurableSubscriptionName("sub2");
问题出在 Artemis 依赖项中,现有使用的依赖项无法处理与集群的 PubSab 连接,我没有找到丢失消息的任何错误日志。
我改变了依赖关系
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>artemis-jms-client-all</artifactId>
<version>2.2.0</version>
</dependency>
现在可以使用了。
我已经创建了带有 2 个节点的 Artemis 集群并成功连接到我的 Spring-boot 应用程序(github link), implementation is based on clustered-static-discovery
现在我正在用它测试持久订阅有一些奇怪的行为 我正在生产 5 味精,只消耗 3
@Bean
public MessageListenerContainer listenerContainer1(@Qualifier("connectionFactory") ConnectionFactory connectionFactory, Consumer consumer, SimpleMessageConverter messageConverter, @Qualifier("topic") Topic topic) {
DefaultMessageListenerContainer defaultMessageListenerContainer =
new DefaultMessageListenerContainer();
@Bean("connectionFactory")
public ConnectionFactory activeMQJMSConnectionFactory(@Qualifier("amqTransportConfiguration") TransportConfiguration transportConfiguration) throws JMSException {
ActiveMQJMSConnectionFactory activeMQJMSConnectionFactory =
new ActiveMQJMSConnectionFactory( false, transportConfiguration);
activeMQJMSConnectionFactory.setPassword("admin");
activeMQJMSConnectionFactory.setUser("admin");
activeMQJMSConnectionFactory.setClientID("admin");
return activeMQJMSConnectionFactory;
}
defaultMessageListenerContainer.setConnectionFactory(connectionFactory);
defaultMessageListenerContainer.setDestination(topic);
defaultMessageListenerContainer.setMessageListener(consumer);
defaultMessageListenerContainer.setSessionAcknowledgeMode(1);
defaultMessageListenerContainer.setSubscriptionName("mySub");
defaultMessageListenerContainer.setSubscriptionDurable(true);
defaultMessageListenerContainer.setMessageConverter(messageConverter);
return defaultMessageListenerContainer;
}
这里是完整的config
我已经完成 http://localhost:816i/hawtio/ wrb UI for artemis 并且发现生产者只收到 5 条消息中的 5 条
(消息负载平衡 -> 严格)
我做错了什么?
看来问题出在代码上。两个不同的持久订阅共享相同的持久订阅名称。在为每个 MessageListenerContainer
实例使用唯一的订阅名称后,我能够通过您的测试:
//listener container (1)
defaultMessageListenerContainer.setDurableSubscriptionName("sub1");
/* --- */
//listener container (2)
defaultMessageListenerContainer.setDurableSubscriptionName("sub2");
问题出在 Artemis 依赖项中,现有使用的依赖项无法处理与集群的 PubSab 连接,我没有找到丢失消息的任何错误日志。 我改变了依赖关系
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>artemis-jms-client-all</artifactId>
<version>2.2.0</version>
</dependency>
现在可以使用了。