如何通过JMS获取ActiveMQ Artemis代理队列的消息属性及全部头部?
获取ActiveMQ消息全部头部属性的方法
你的现有代码是用来判断特定属性_AMQ_LARGE_SIZE是否存在,要获取全部消息头部属性,只需要去掉针对特定属性的判断逻辑,完整遍历所有枚举出来的属性名,并逐个获取对应的值即可。
修改后的完整代码示例
ArrayList<Message> messages = new ArrayList<>(); // 先校验消息列表非空,避免空指针异常 if (!messages.isEmpty()) { Message targetMsg = messages.get(0); Enumeration<?> propertyNames = targetMsg.getPropertyNames(); // 用Map存储所有头部属性的键值对,方便后续操作 Map<String, Object> allMessageHeaders = new HashMap<>(); while (propertyNames.hasMoreElements()) { String propName = (String) propertyNames.nextElement(); // 根据属性名获取对应的值 Object propValue = targetMsg.getProperty(propName); allMessageHeaders.put(propName, propValue); } // 示例:遍历打印所有头部属性 for (Map.Entry<String, Object> headerEntry : allMessageHeaders.entrySet()) { System.out.printf("头部属性名: %s, 属性值: %s%n", headerEntry.getKey(), headerEntry.getValue()); } }
关键说明
- 增加了消息列表非空判断,防止调用
messages.get(0)时出现NullPointerException - 使用
HashMap存储所有属性键值对,便于后续的查询、遍历或其他业务处理 - 核心逻辑是遍历
getPropertyNames()返回的所有属性名,通过getProperty(propName)获取每个属性对应的值 - 如果只需要收集属性名而不需要值,直接遍历
propName存入集合即可
内容的提问来源于stack exchange,提问作者Limbarunda
相关产品推荐
相关产品推荐

