如何通过JMS获取ActiveMQ Artemis中的JMSType?

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

我有代码可以查看消息并告诉我其类型(文本或字节)。我不明白为什么我的消息类型输出 null 而不是文本或字节

Enumeration<Message> messageEnumeration =  queueBrowser.getEnumeration();
        ArrayList<Message> messages = new ArrayList<>();
        while (messageEnumeration.hasMoreElements()){
            messages.add(messageEnumeration.nextElement());
        }
        System.out.println(messages.get(0).getJMSMessageID());
        System.out.println(messages.get(0).getJMSType());

控制台输出:

ID:55350491-5216-11ee-8196-f832e49e9cfd
null

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

您似乎希望从

getJMSType
返回的值代表消息的基础数据类型。然而,这不是 getJMSType 返回的。 “JMSType”是客户端发送消息时设置的任意值。
请注意,

getJMSType()

文档指出:


获取消息发送时客户端提供的消息类型标识符
。 (强调我的)

此外,

setJMSType(String)
的文档指出:

一些 JMS 提供程序使用消息存储库,其中包含应用程序发送的消息的定义。 JMSType 标头字段可以引用提供者存储库中的消息定义。

JMS API 没有定义标准消息定义存储库,也没有为其包含的定义定义命名策略。

如果您想检测消息的基础数据类型,您可以使用

instanceof
以及各种

Message
实现,例如:
if (messages.get(0) instanceof TextMessage) {
   System.out.println("This is a text message");
} else if (messages.get(0) instanceof BytesMessage) {
   System.out.println("This is a bytes message");
} ...


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