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) {
// ...
}
}
Читайте также:
- Spring Boot: обмен сообщениями, JMS, ActiveMQ
- Spring Boot: обмен сообщениями, JMS, поддержка Artemis
- Spring Boot: кэширование
Комментарии
Отправить комментарий