You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将接收JMS Message的代码适配为ActiveMQ Artemis代码?

问题描述

我有一段读取队列并接收JMS Message类对象的代码,但JMS的Message类缺少getPersistentSize这类getter方法。我已经找到自定义获取这些属性的方案,但现在想知道:能不能把代码改写成使用ActiveMQ Artemis的Message类,而非标准JMS的Message类?

我的代码如下:

connectQueueBrowser();
Enumeration<Message> messageEnumeration =  queueBrowser.getEnumeration();
ArrayList<Message> messages = new ArrayList<>();
while (messageEnumeration.hasMoreElements()){
   messages.add(messageEnumeration.nextElement());
}
System.out.println(messages.get(0).getBody(String.class));
解决方案

完全可以改用ActiveMQ Artemis的Message类来实现,而且这样能直接获取getPersistentSize这类JMS标准Message没有的属性,具体实现如下:

  1. 类型转换:队列浏览器返回的JMS Message对象,底层是ActiveMQ Artemis的CoreMessage实现类,可直接强转为org.apache.activemq.artemis.api.core.Message接口类型。
  2. 调用专属方法:转换完成后,就能直接调用getPersistentSize()、getTimestamp()等Artemis专属的getter方法。

修改后的代码示例:

connectQueueBrowser();
Enumeration<Message> messageEnumeration = queueBrowser.getEnumeration();
ArrayList<org.apache.activemq.artemis.api.core.Message> artemisMessages = new ArrayList<>();

while (messageEnumeration.hasMoreElements()) {
    Message jmsMessage = messageEnumeration.nextElement();
    // 将JMS Message转换为Artemis核心Message
    org.apache.activemq.artemis.api.core.Message artemisMessage = ((org.apache.activemq.artemis.jms.client.ActiveMQMessage) jmsMessage).getCoreMessage();
    artemisMessages.add(artemisMessage);
}

// 调用Artemis专属方法并输出
if (!artemisMessages.isEmpty()) {
    System.out.println("消息内容:" + artemisMessages.get(0).getBodyBuffer().readString());
    System.out.println("持久化大小:" + artemisMessages.get(0).getPersistentSize());
    System.out.println("消息时间戳:" + artemisMessages.get(0).getTimestamp());
}
注意事项
  • 确保项目依赖中包含ActiveMQ Artemis客户端Jar包,避免类转换异常。
  • 该实现依赖Artemis的JMS底层细节,若后续切换其他JMS Provider,代码需对应调整。
  • Artemis的CoreMessage通过BodyBuffer处理消息体,读取字符串需用getBodyBuffer().readString(),和JMS的getBody()用法有区别。

内容的提问来源于stack exchange,提问作者user21871375

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 15:53:22