Создание временной темы JMS jms в Spring

Я пытаюсь реорганизовать некоторый устаревший код, чтобы использовать Spring для обработки подключений jms к службе мэйнфреймов. Мне нужно подключиться, создать временную тему для ответа службы мейнфрейма и установить ее как message.setJMSReplyTo(replyTo); в сообщении, прежде чем я отправлю сообщение.

Может ли кто-нибудь привести примеры этого? Я не нашел в документации ничего, что позволяло бы вам получить доступ к низкоуровневым объектам jms, таким как сеанс или TopicConnection, для создания временной темы.


person Rob    schedule 19.10.2009    source источник


Ответы (2)


Если вам нужен низкоуровневый доступ к JMS API с помощью JmsTemplate, вам нужно использовать один из методы JmsTemplate execute(...). Самый простой из них — execute(SessionCallBack), где SessionCallback предоставляет вам объект сеанса JMS. При этом вы можете позвонить createTemporaryQueue() или createTemporaryTopic(). Вы, вероятно, можете использовать один из других методов execute(), который сделает за вас часть начальной работы, например этот.

person skaffman    schedule 19.10.2009

Мне удалось динамически создать очередь, используя следующий код в приложении 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();
    }
}
person ptsw    schedule 04.02.2015