Java ActiveMQ使用者无法使用请求队列上的消息

Java ActiveMQ使用者无法使用请求队列上的消息,java,spring-boot,activemq,spring-jms,Java,Spring Boot,Activemq,Spring Jms,过程: 应用程序A正在启动时创建与“请求队列”的使用者连接 在远程活动MQ代理中。应用程序B正在将请求推送到“请求 队列”,应用程序A使用该队列。应用程序A生成响应 进入另一个队列“响应队列” 应用程序A正在使用ActiveMQ连接工厂和Spring DMLC 消费信息 我从SpringDMLC中了解到的是,它不断地在队列上进行轮询 留言 问题: 应用程序A最初在应用程序重新启动时使用请求。但在第二次使用请求时,在第二天发出另一个请求时失败。即使消费者在第二个请求到达时也会拒绝 目前已尝试: 该

过程:

应用程序A正在启动时创建与“请求队列”的使用者连接 在远程活动MQ代理中。应用程序B正在将请求推送到“请求 队列”,应用程序A使用该队列。应用程序A生成响应 进入另一个队列“响应队列”

应用程序A正在使用ActiveMQ连接工厂和Spring DMLC 消费信息

我从SpringDMLC中了解到的是,它不断地在队列上进行轮询 留言

问题:

应用程序A最初在应用程序重新启动时使用请求。但在第二次使用请求时,在第二天发出另一个请求时失败。即使消费者在第二个请求到达时也会拒绝

目前已尝试:

该问题仅存在于现场。根据观察,消费者在一定时间(30分钟)后无法处理/接收传入消息。 我尝试在其他环境中使用相同的代理设置,但不幸的是无法重新生成。我尝试了所有其他链接,但都没有成功

寻找指针:

我使用的方式有什么根本性的问题吗 消费和生产的ActiveMQ连接

关于调试问题需要注意的配置的可能指针

代码:

消息轮询器配置代码:

@配置
@使能JMS
@组件扫描
@Slf4j
公共类消息轮询器
{
@值(“${outbound.queue}”)
私有字符串外部队列;
私人最终经纪人财产经纪人财产;
@自动连线
public MessagePoller(BrokerProperties BrokerProperties){this.BrokerProperties=BrokerProperties;}
@Bean(名称=连接\u工厂)
@初级的
公共ActiveMQConnectionFactory connectionFactory()
{
ActiveMQConnectionFactory connectionFactory=新的ActiveMQConnectionFactory();
connectionFactory.setBrokerURL(brokerProperties.getUrl());
connectionFactory.setUserName(brokerProperties.getUser());
connectionFactory.setPassword(brokerProperties.getPassword());
返回连接工厂;
}
@豆子
公共JmsListenerContainerFactory JmsListenerContainerFactory()
{
DefaultJmsListenerContainerFactory工厂=
新的DefaultJmsListenerContainerFactory();
setConnectionFactory(connectionFactory());
factory.setConcurrency(“1-1”);
setErrorHandler(getErrorHandler());
factory.setSessionAcknowledgeMode(会话自动确认);
setMessageConverter(新的SimpleMessageConverter());
factory.setPubSubDomain(false);
返回工厂;
}
@Bean(名称=出站JMS\u模板)
公共JmsTemplate outboudJmsTemplate(
@限定符(连接工厂)
连接工厂(连接工厂)
{
JmsTemplate template=新的JmsTemplate(connectionFactory);
template.setPubSubDomain(false);
template.setDefaultDestinationName(outboundQueue);
返回模板;
}
私有ErrorHandler getErrorHandler()
{
返回exception->log.error(“从使用者引发的异常”,异常);
}
}
消息侦听器代码:

@JmsListener(
destination=“requestQueue”,
containerFactory=“jmsListenerContainerFactory”
)
消息(消息jmsMessage)上的公共无效
{
info(“TriggerJobOnRequestService.onMessage()启动”);
log.info(“传入请求消息:{}”,jmsMessage);
整数deliveryCount=jmsMessage.getHeaders().get(“JMSXDeliveryCount”,Integer.class);
log.info(“有效载荷:{}”,jmsMessage.getPayload());
info(“Headers:{}”,jmsMessage.getHeaders());
log.info(“交货计数:{}”,交货计数);
//处理代码逻辑
info(“TriggerJobOnRequestService.onMessage()结束”);
}
ActiveMQ连接url:

spring.activemq.url=failover://(tcp://mqueue05.net:61616,tcp://mqueue06.net:61616,tcp://mqueue07.net:61616,tcp://mqueue08.net:61616)?randomize=false&timeout=100&initialReconnectDelay=1000&maxReconnectDelay=1000&maxReconnectAttempts=10

@贾斯汀·伯特伦。你想分享一些关于这个问题的建议吗?我现在没有任何建议。@Justin Bertam至少代码有可能是根本错误的吗?我不确定。我尽量避免使用Spring JMS。我发现直接使用JMS API更简单、功能更强大。如果使用spring boot,则不需要
@EnableJms
@ComponentScan
注释。请参阅我如何使用
@Configuration
以最少的配置访问两个代理。还要注意,
@Configuration
bean仅在您想要访问两个代理时才是必需的。否则,只有
application.yml
属性就足以访问一个(本地或远程)代理。