Spring Boot: обмен сообщениями, JMS, отправка и получение сообщения

Отправка сообщения

Spring JmsTemplate настраивается автоматически, и вы можете автоматически связать его с вашими компонентами, как показано в следующем примере:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Component;

@Component
public class MyBean {

    private final JmsTemplate jmsTemplate;

    @Autowired
    public MyBean(JmsTemplate jmsTemplate) {
        this.jmsTemplate = jmsTemplate;
    }

    // ...

}

JmsMessagingTemplate может быть введен подобным образом. Если определен компонент DestinationResolver или MessageConverter, он автоматически связывается с автоматически настроенным JmsTemplate.

Получение сообщения

При наличии инфраструктуры JMS любой компонент может быть аннотирован @JmsListener для создания конечной точки слушателя. Если JmsListenerContainerFactory не был определен, по умолчанию настраивается автоматически. Если определены bean-объекты DestinationResolver или MessageConverter, они автоматически связываются с default фабрикой.

По умолчанию default фабрика является транзакционной. Если вы работаете в инфраструктуре, где присутствует JtaTransactionManager, он по умолчанию связан с контейнером слушателя. Если нет, флаг sessionTransacted включен. В этом последнем сценарии вы можете связать транзакцию локального хранилища данных с обработкой входящего сообщения, добавив @Transactional в свой метод слушателя (или его делегата). Это гарантирует, что входящее сообщение будет подтверждено после завершения локальной транзакции. Это также включает в себя отправку ответных сообщений, которые были выполнены в том же сеансе JMS.

Следующий компонент создает конечную точку слушателя в месте назначения someQueue:

@Component
public class MyBean {

    @JmsListener(destination = "someQueue")
    public void processMessage(String content) {
        // ...
    }

}

Если вам нужно создать больше экземпляров JmsListenerContainerFactory или переопределить значение по умолчанию, Spring Boot предоставляет DefaultJmsListenerContainerFactoryConfigurer, который можно использовать для инициализации DefaultJmsListenerContainerFactory с теми же параметрами, что и автоматически настраиваемые.

Например, следующий пример предоставляет другую фабрику, которая использует определенный MessageConverter:

@Configuration(proxyBeanMethods = false)
static class JmsConfiguration {

    @Bean
    public DefaultJmsListenerContainerFactory myFactory(
            DefaultJmsListenerContainerFactoryConfigurer configurer) {
        DefaultJmsListenerContainerFactory factory =
                new DefaultJmsListenerContainerFactory();
        configurer.configure(factory, connectionFactory());
        factory.setMessageConverter(myMessageConverter());
        return factory;
    }

}

Затем вы можете использовать фабрику в любом аннотированном методе @JmsListener следующим образом:

@Component
public class MyBean {

    @JmsListener(destination = "someQueue", containerFactory="myFactory")
    public void processMessage(String content) {
        // ...
    }

}


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки