如何在 Artemis JMX 中将 CompositeData[] 类对象翻译成 Message 类对象?

问题描述 投票:0回答:1

我正在使用 JMX 通过 QueueControl 类及其浏览方法连接到 Artemis 队列,该方法返回一个 CompositeData 数组,但我无法使用 get 方法获取各个标头,因为没有任何标头。请告诉我如何通过 Artemis 上的 JMX 获取不是整个标题的主体,而是某些字段

我也试过 listMessage 方法,但是它给出了一个不完整的标题列表,并且没有显示消息的正文

java jmx activemq-artemis
1个回答
0
投票

CompositeData
中获取消息详细信息的关键是
CompositeDataConstants
类,例如:

      QueueControl queueControl = ...
      CompositeData[] messages = queueControl.browse();
      for (CompositeData message : messages) {
         System.out.println("MESSAGE_ID: " + message.get(CompositeDataConstants.MESSAGE_ID));
         System.out.println("ADDRESS: " + message.get(CompositeDataConstants.ADDRESS));
         System.out.println("TEXT_BODY: " + message.get(CompositeDataConstants.TEXT_BODY));
         System.out.println("DURABLE: " + message.get(CompositeDataConstants.DURABLE));
         System.out.println("EXPIRATION: " + message.get(CompositeDataConstants.EXPIRATION));
      }

如果您不想直接使用常量,您可以在here.

中找到它们各自的值

请记住,由于

management-message-attribute-size-limit
,返回的数据可能会被截断。 文档解释了这个设置:

management-message-attribute-size-limit
是从消息中收集的用于浏览的字节数。这与在队列控件上公开的
browse
list
管理方法有关。长度超过此值的消息属性将被截断。默认为
256
。使用
-1
关闭此限制。请注意,需要为给定时刻可见的所有消息分配内存。将此值设置得太高可能会影响浏览器的稳定性,因为浏览许多消息可能需要大量内存。

© www.soinside.com 2019 - 2024. All rights reserved.