gpt4 book ai didi

java - @JmsListeners 用于泛型类型?

转载 作者:行者123 更新时间:2023-12-02 03:03:32 25 4
gpt4 key购买 nike

我有一个定义 2 个 JMSListener 的类。 1 个监听器用于客户端从使用 JMS 的服务器接收的消息 MyMessage1。另一个是 MyMessage2,它是由另一个程序生成的,而不是使用 JMS(不是 java 程序)。似乎当我尝试接收此消息时,我收到一些 JMS 监听器异常。它似乎正在获取 GenericMessage 并尝试将其转换为 MyMessage,尽管有效负载表明它是 MyMessage2,尽管它没有指定完整的 java 包名称它。

GenericMessage 到底是什么?这是否表明发件人没有正确识别消息的类型?我是否需要以某种方式为通用消息定义 JMSListener 并手动序列化它,而不是使用 JmsListenerContainerFactory

@JmsListener()
private void consumeMessage1(final MyMessge1 msg) {
//...
}

@JmsListener()
private void consumeMessage2(final MyMessge2 msg) {
//...
}


org.springframework.jms.listener.adapter.ListenerExecutionFailedException: Listener method could not be invoked with incoming message
Endpoint handler details:
Method [private void my.proj.ResultQueueConsumer.consumeMessage1(my.proj.MyMessage1)]
Bean [my.proj.ResultQueueConsumer@24fe9d1]
; nested exception is org.springframework.messaging.converter.MessageConversionException: No converter found to convert to class my.proj.MyMessage1, message=GenericMessage [payload=MyMessage2{attr1='response', version='2.0', attr2='PROJ', attr3='ERROR'}, headers={JMS_AMQP_FirstAcquirer=false, jms_timestamp=0, hostId=my-machine1, requestId=c83b5719-daaa-43f8-9444-b16580d06950, jms_priority=4, jms_messageId=ID:my-machine1-41383-1486390497702-3:127:0:0:1, timestamp=1486391400112, id=33e78ff8-9e7b-1436-ee21-36cacb1ff6b5, JMS_AMQP_MESSAGE_FORMAT=0, jms_deliveryMode=1, jms_redelivered=false, JMS_AMQP_NATIVE=false, jms_destination=queue://Result, sessionId=057907c44eeb18e3940278973a610b2638d198c4, jms_expiration=0}]

最佳答案

一个GenericMessage<>spring-messaging对象。

传入的 JMS 消息首先转换为 GenericMessage然后用其中的组件调用监听器;例如,您可以有一个方法签名

void foo(@Payload MyMessage2 msh, @Header("foo") int someHeader)

该错误消息表明带有 MyMessage2 的消息已收到,框架正在尝试调用您的第一个监听器方法。

如果它们都监听同一个队列,则消息将随机发送到一个或另一个监听器,除非您添加 selector并且可以以某种方式从 header (在选择器表达式中使用)确定有效负载类型。

该框架不提供根据有效负载类型路由到特定方法的机制。

不太清楚你的意思...

Another is for a MyMessage2, which is generated by another program, not using JMS (not a java program).

...因为我们显然能够构建一个 MyMessage2消息中的 java 对象。

关于java - @JmsListeners 用于泛型类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42090747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com