我正在尝试重构一些遗留代码,以使用Spring来处理与大型机服务的jms连接。我需要连接为大型机服务回复创建临时主题,并在发送消息之前将其设置为消息中的message.setJMSReplyTo(replyTo);
。
有人可以举例说明吗?我没有在文档中找到任何允许您访问低级jms对象(如会话或TopicConnection)以创建临时主题的内容。
答案 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();
}
}