首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NoJMSMessageIdException: MISSING_JMS_MESSAGE_ID

NoJMSMessageIdException: MISSING_JMS_MESSAGE_ID
EN

Stack Overflow用户
提问于 2022-07-27 17:45:15
回答 1查看 74关注 0票数 0

我使用Python向ActiveMQ Artemis上的队列发送STOMP消息。但是,当我的Spring应用程序接收到消息时,我得到:

代码语言:javascript
复制
NoJMSMessageIdException: MISSING_JMS_MESSAGE_ID.

我试图像头或属性一样设置不同的值,如JMSMessageIDmsgIDMESSAGE_ID等。

我发现我的应用程序使用这种方法验证消息。我试着把它和id一起发送,但是没有帮助。它期望什么?如何用Python中的脚发送它?

Python客户端文档有这样的例子,但是它没有解释如何发送这个JMS:

发送(目的地、正文、content_type=None、headers=None、**keyword_headers)向消息传递系统中的目的地发送消息(根据https://stomp.github.io/stomp-specification-1.2.html#SEND)参数:

  • 目标 (str) --目的地(例如消息队列--例如‘/ queue /test’-或消息主题)
  • body:消息的内容
  • content_type (str):消息的MIME类型
  • headers (dict):要在消息帧中发送的附加标头
  • keyword_headers:代理所需的任何附加标头

我的代码:

代码语言:javascript
复制
import stomp
import json


jsonRequest = {
    "data": {
        "key": "value"

}}


class MyListener(stomp.ConnectionListener):
    def on_error(self, frame):
        print('received an error "%s"' % frame.body)

    def on_message(self, frame):
        print('received a message "%s"' % frame.body)


conn = stomp.Connection([('host', 63001)])
conn.set_listener('', MyListener())
conn.connect('user', 'password', wait=True)
conn.subscribe(destination='queue', id=1, ack='auto')
conn.send(destination='queue', body=json.dumps(jsonRequest),  MESSAGE_ID='e5bf8c3d-0dc4-11ed-a28a-544d36153f8c', JMSMessageID='ID:e5bf8c3d-0dc4-11ed-a28a-544d36153f5c', headers={'MESSAGE_ID': 'ID:e5bf8c3d-0dc4-11ed-a28a-544d36153f5c', 'JMSCorrelationID': '123278256677', 'JMSReplyTo': 'queue'},
MSGUID="3e4fb627-85df-4b37-b37b-1070c7893c99", TotalNumberMsg=1, CurrentNumberMsg=1, UIPSYSTEMDATA=72)

test = MyListener()

我在后端服务日志中有错误:

代码语言:javascript
复制
2022-07-27 20:10:53 [,] [DefaultMessageListenerContainer-2] ERROR service.jms.listener.base.AbstractArtemisMessageListener - Exception while processing message MISSING_JMS_MESSAGE_ID
service.exception.NoJMSMessageIdException: MISSING_JMS_MESSAGE_ID

当我通过JMS ToolBox发送消息时,它具有以下id:

代码语言:javascript
复制
2022-07-27 18:58:03 [,] [DefaultMessageListenerContainer-2] INFO  service.jms.listener.base.AbstractArtemisMessageListener - Message from srv: ActiveMQMessage[ID:e5bf8c3d-0dc4-11ed-a28a-544d36153f0c]:PERSISTENT/ClientLargeMessageImpl[messageID=318412845, durable=true, address=queue,userID=e5bf8c3d-0dc4-11ed-a28a-544d36153f0c,properties=TypedProperties[__AMQ_CID=JMSToolBox-1657948224556,TotalNumberMsg=1,JMSReplyTo=queue://,_AMQ_ROUTING_TYPE=1,MSGUID=3e4fb627-85df-4b37-b37b-1070c7893c82,SERVICENAME=service,JMSCorrelationID=5515D5431364567,_AMQ_VALIDATED_USER=ACTIVEMQ.CLUSTER.ADMIN.USER,CurrentNumberMsg=1,UIPSYSTEMDATA=063224508,_AMQ_LARGE_SIZE=308737]] with correlationId: 5515D5431364567

通过STOMP,它具有空值:

代码语言:javascript
复制
2022-07-27 19:12:52 [,] [DefaultMessageListenerContainer-2] INFO  service.jms.listener.base.AbstractArtemisMessageListener - Message from srv: ActiveMQMessage[null]:NON-PERSISTENT/ClientLargeMessageImpl[messageID=318581407, durable=false, address=queue,userID=null,properties=TypedProperties[content-length=110919,destination=queue,JMSReplyTo=queue,TotalNumberMsg=1,_AMQ_ROUTING_TYPE=1,MSGUID=3e4fb627-85df-4b37-b37b-1070c7893c99,SERVICENAME=service,JMSCorrelationID=123278256677,_AMQ_VALIDATED_USER=ACTIVEMQ.CLUSTER.ADMIN.USER,CurrentNumberMsg=1,UIPSYSTEMDATA=72,_AMQ_LARGE_SIZE=110919,messageID=125774553292,JMSType=NULL-value]] with correlationId: 123278256677
EN

回答 1

Stack Overflow用户

发布于 2022-07-27 20:51:00

JMS 2规范第3.4.3节规定(强调地雷):

JMSMessageID标头字段包含一个值,该值唯一标识由提供程序发送的每个消息 当发送消息时,JMSMessageID将被忽略。当send方法返回时,它包含一个provider-assigned值。

JMS1.1规范第3.4.3节中也有相同的基本文本。

这里说明的要点是,当应用程序使用“提供者”提供的JMS库发送消息时,JMSMessageID被分配给消息(本例中为ActiveMQ Artemis )。但是,您是而不是,它使用JMS库发送消息。你用STOMP客户端库发送了一条消息。因此,消息没有分配给它的JMSMessageID

此外,设置JMSMessageID实际上也是可选的,即使对JMS也是如此。见javax.jms.MessageProducer#setDisableMessageID

因此,如果service.jms.listener.base.AbstractArtemisMessageListener返回null是完全有效的,那么您的null类不应该认为它是一个错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73142471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档