我有两个应用程序,一个是发送请求,另一个是应答,我正在尝试使用@JmsListener实现它。
下面的代码可以工作:
public JmsTemplate jmsTemplate (ConnectionFactory connectionFactory){
JmsTemplate jmsTemplate = new JmsTemplate();
jmsTemplate.setConnectionFactory(connectionFactory);
Destination destination = new ActiveMQQueue("replydestination");
jmsTemplate.setDefaultDestination(destination);
return jmsTemplate;
}
@JmsListener(destination = "somedestination",
containerFactory = "defaultJmsListenerContainerFactory")
public void receiveMessage (Message message) throws JMSException {
jmsTemplate.send(new ActiveMQTextMessage());
}但当更改为@SendTo("replydestination")时,它将停止工作:
@JmsListener(destination = "somedestination",
containerFactory = "defaultJmsListenerContainerFactory")
@SendTo("replydestination")
public Message receiveMessage (Message message) throws JMSException {
return new ActiveMQTextMessage();
}请帮助我了解原因,以及我是否可以在不使用JmsTemplate的情况下进行此集成。
发布于 2021-01-05 23:50:48
JMS消息应该使用来自javax.jms.Session的方法或如下所示的构建器来构造:
@JmsListener(destination = "somedestination",
containerFactory = "defaultJmsListenerContainerFactory")
@SendTo("replydestination")
public org.springframework.messaging.Message<String> listen(javax.jms.Message message) {
org.springframework.messaging.Message<String> reply = MessageBuilder
.withPayload("MyReply")
.build();
return reply;
}发布于 2021-01-06 00:31:54
这也行得通。
@SpringBootApplication
public class So65570932Application {
public static void main(String[] args) {
SpringApplication.run(So65570932Application.class, args);
}
@JmsListener(destination = "foo")
@SendTo("bar")
String listen(String in) {
System.out.println(in);
return in.toUpperCase();
}
@Bean
public ApplicationRunner runner(JmsTemplate template) {
return args -> {
template.convertAndSend("foo", "baz");
template.setReceiveTimeout(10_000);
System.out.println(template.receiveAndConvert("bar"));
};
}
}https://stackoverflow.com/questions/65570932
复制相似问题