【发布时间】:2016-05-12 21:34:40
【问题描述】:
我有一个带有@JmsListener 方法的spring 服务。它被客户端调用,通过 JmsMessagingTemplate.convertSendAndReceive() 发送消息。这很好用。
@Service
public class JmsMessageProcessor {
@JmsListener(destination = "myDestination")
protected Message<MyResponseObj> handleRequest(final MyInputObj myObj) {
return MessageBuilder.withPayload(processObj(myObj)).build();
}
}
.
// client
MyResponseObj response = jmsMessagingTemplate.convertSendAndReceive(myDestination, myObj,
MyResponseObj.class);
我正在尝试在客户端上实现仅用于进行convertSend 调用的功能。也就是说,客户端将发送并忘记,而不是等待响应。我打了这样一个电话,它确实在服务器端得到处理
jmsMessagingTemplate.convertAndSend(myDestination, myObj);
但是,我在服务器端收到一个错误,表明请求消息不包含回复目标。这对我来说很有意义,因为我没有通过 jmsMessageTemplate 进行“接收”方法调用。但是,我不确定该怎么做。是否可以为同一个目的地使用另一个 JmsListener 方法,但专门处理“发送而不回复”请求,还是我必须创建一个单独的目的地和 ActiveMQQueue?基本上,我希望我的服务器/jms 侦听器能够在不需要时不发回响应。
javax.jms.InvalidDestinationException: Cannot determine response destination: Request message does not contain reply-to destination, and no default response destination set.
org.springframework.jms.listener.adapter.ReplyFailureException: Failed to send reply with payload [GenericMessage [payload=MyResponseObj@51c082ec, headers={timestamp=1462996638601, id=41877e45-b220-a320-f07a-64f9d50d98ae}]]; nested exception is javax.jms.InvalidDestinationException: Cannot determine response destination: Request message does not contain reply-to destination, and no default response destination set.
at org.springframework.jms.listener.adapter.AbstractAdaptableMessageListener.handleResult(AbstractAdaptableMessageListener.java:249) ~[spring-jms-4.2.3.RELEASE.jar:4.2.3.RELEASE]
at org.springframework.jms.listener.adapter.MessagingMessageListenerAdapter.onMessage(MessagingMessageListenerAdapter.java:68) ~[spring-jms-4.2.3.RELEASE.jar:4.2.3.RELEASE]
at org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:721) ~[spring-jms-4.2.3.RELEASE.jar:4.2.3.RELEASE]
at org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:681) [spring-jms-4.2.3.RELEASE.jar:4.2.3.RELEASE]
at org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:651) [spring-jms-4.2.3.RELEASE.jar:4.2.3.RELEASE]
at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:315) [spring-jms-4.2.3.RELEASE.jar:4.2.3.RELEASE]
at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:253) [spring-jms-4.2.3.RELEASE.jar:4.2.3.RELEASE]
at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1150) [spring-jms-4.2.3.RELEASE.jar:4.2.3.RELEASE]
at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1142) [spring-jms-4.2.3.RELEASE.jar:4.2.3.RELEASE]
at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:1039) [spring-jms-4.2.3.RELEASE.jar:4.2.3.RELEASE]
at java.lang.Thread.run(Thread.java:745) [?:1.7.0_99]
Caused by: javax.jms.InvalidDestinationException: Cannot determine response destination: Request message does not contain reply-to destination, and no default response destination set.
at org.springframework.jms.listener.adapter.AbstractAdaptableMessageListener.getResponseDestination(AbstractAdaptableMessageListener.java:343) ~[spring-jms-4.2.3.RELEASE.jar:4.2.3.RELEASE]
at org.springframework.jms.listener.adapter.AbstractAdaptableMessageListener.getResponseDestination(AbstractAdaptableMessageListener.java:316) ~[spring-jms-4.2.3.RELEASE.jar:4.2.3.RELEASE]
at org.springframework.jms.listener.adapter.AbstractAdaptableMessageListener.handleResult(AbstractAdaptableMessageListener.java:245) ~[spring-jms-4.2.3.RELEASE.jar:4.2.3.RELEASE]
... 10 more
【问题讨论】:
标签: java jms activemq spring-jms