我有代码可以查看消息并告诉我其类型(文本或字节)。我不明白为什么我的消息类型输出 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
您似乎希望从
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");
} ...