【问题标题】:Why are the number of reported activemq queues changing when using jmstemplate?为什么使用jmstemplate时报告的activemq队列数会发生变化?
【发布时间】:2019-06-20 19:32:41
【问题描述】:

使用JmsTemplate获取activemq队列列表时,上报的队列数变化

 private Set<String> queues = new HashSet<>();

     try(ActiveMQConnection connection = (ActiveMQConnection) 
      jmsTemplate.getConnectionFactory().createConnection()){
            connection.start();

            for(ActiveMQQueue queue : connection.getDestinationSource().getQueues()){
                queues.add(queue.getQueueName());
            }

            queues.remove(defaultReplyToQueue);

            log.info("findAllQueues found {}", queues.size());
            return queues;
        }

【问题讨论】:

  • 多次调用上述代码时,报出的队列数不等,有时相同,有时少,有时多
  • 调用代码时是否还有其他活动
  • 上面的代码是响应一个rest api调用而被调用的,结果不时变化,每次调用rest api都会调用上面的代码

标签: java spring-boot activemq spring-jms jmstemplate


【解决方案1】:

由于给出的细节有限,这很难完全回答,但我猜这个问题归结为队列在目标源中的填充方式。当代理枚举现有队列时,它们以异步方式到达。这意味着仅打开一个连接并立即请求所有队列可能会报告随机结果,因为并非所有队列都来自代理。

【讨论】:

  • 嗨,蒂姆,我有一项服务需要通过休息 api 报告队列。我观察到的是rest api响应有时会返回不同的队列列表,上面的代码会为每个rest调用调用
  • 你能告诉我们有什么不同吗?
  • 队列名称列表有时是预期的所有队列名称,但是在以后的调用中,即使存在相同的队列,报告的队列也更少,有时是 5 而不是 35,有时,再次正确的数字
  • 您的方法注定要失败,因为您使用的 API 无法保证它在任何给定时间都会拥有所有数据。您需要使用 JMX 之类的稳定 API 来访问代理 MBean 以获取有效数据。
猜你喜欢
  • 2015-02-19
  • 2017-03-01
  • 1970-01-01
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
  • 2012-08-07
  • 2018-10-04
  • 2017-05-09
相关资源
最近更新 更多