在Spring中创建临时JMS jms主题

时间:2009-10-19 18:29:11

标签: java spring jms jmstemplate

我正在尝试重构一些遗留代码,以使用Spring来处理与大型机服务的jms连接。我需要连接为大型机服务回复创建临时主题,并在发送消息之前将其设置为消息中的message.setJMSReplyTo(replyTo);

有人可以举例说明吗?我没有在文档中找到任何允许您访问低级jms对象(如会话或TopicConnection)以创建临时主题的内容。

2 个答案:

答案 0 :(得分:1)

如果您需要使用JmsTemplate对JMS API进行低级访问,则需要使用JmsTemplate's execute(...)方法之一。其中最简单的是execute(SessionCallBack),其中SessionCallback为您提供了JMS Session对象。有了它,您可以致电createTemporaryQueue()createTemporaryTopic()。您可以使用其他execute()方法之一为您执行一些初始工作,例如this one

答案 1 :(得分:1)

我能够使用Spring Boot应用程序中的以下代码动态创建队列:

在Application.java中

@Bean 
public ConnectionFactory jmsFactory()
{
    ActiveMQConnectionFactory amq = new ActiveMQConnectionFactory()

    amq.setBrokerURL("tcp://somehost");

    return amq;
}

@Bean 
public JmsTemplate myJmsTemplate()
{
    JmsTemplate jmsTemplate = new JmsTemplate(jmsFactory());

    jmsTemplate.setPubSubDomain(false);
    return jmsTemplate;
}

然后在另一个动态创建队列的类中:

@Component
public class Foo {
    @Autowired
    private ConnectionFactory jmsFactory;

    public void someMethod () {
        DefaultMessageListenerContainer messageListener = new DefaultMessageListenerContainer();

        messageListener.setDestinationName("queueName");
        messageListener.setConnectionFactory(jmsFactory);
        messageListener.setMessageListener(new Consumer("queueName"));
        messageListener.setPubSubDomain(false);
        messageListener.initialize();
        messageListener.start();
    }
}