首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JmsTemplate和@SendTo()有什么区别?

JmsTemplate和@SendTo()有什么区别?
EN

Stack Overflow用户
提问于 2021-01-05 06:53:06
回答 2查看 69关注 0票数 0

我有两个应用程序,一个是发送请求,另一个是应答,我正在尝试使用@JmsListener实现它。

下面的代码可以工作:

代码语言:javascript
复制
    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")时,它将停止工作:

代码语言:javascript
复制
    @JmsListener(destination = "somedestination",
            containerFactory = "defaultJmsListenerContainerFactory")
    @SendTo("replydestination")
    public Message receiveMessage (Message message) throws JMSException {
        return new ActiveMQTextMessage();
    }

请帮助我了解原因,以及我是否可以在不使用JmsTemplate的情况下进行此集成。

EN

回答 2

Stack Overflow用户

发布于 2021-01-05 23:50:48

JMS消息应该使用来自javax.jms.Session的方法或如下所示的构建器来构造:

代码语言:javascript
复制
@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;
}
票数 1
EN

Stack Overflow用户

发布于 2021-01-06 00:31:54

这也行得通。

代码语言:javascript
复制
@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"));
        };
    }

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

https://stackoverflow.com/questions/65570932

复制
相关文章

相似问题

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