SpringBoot-ActiveMQ消息列队
消息
Spring框架为与消息传递系统的集成提供了广泛的支持,从使用JmsTemplate简化JMS API的使用,到异步接收消息的完整基础架构。Spring AMQP为高级消息队列协议提供了类似的功能集。Spring Boot还为RabbitTemplate和RabbitMQ提供了自动配置选项。SpringWebSocket本机包括对STOMP消息的支持,SpringBoot通过启动器和少量自动配置来支持这一点。Spring Boot还支持Apache Kafka。
一 ActiveMQ
1 JMS
javax。jms。ConnectionFactory接口提供了创建javax的标准方法。jms。用于与JMS代理交互的连接。尽管Spring需要一个ConnectionFactory来处理JMS,但您通常不需要自己直接使用它,而是可以依赖更高级别的消息传递抽象 Spring Boot还自动配置必要的基础结构以发送和接收消息。
ActiveMQ Support
当ActiveMQ在类路径上可用时,Spring Boot还可以配置ConnectionFactory。如果存在代理,则会自动启动和配置嵌入式代理(前提是没有通过配置指定代理URL,并且在配置中未禁用嵌入式代理)。
默认情况下,ActiveMQ自动配置为使用VM传输,它启动嵌入在同一JVM实例中的代理。
配置禁用 activemq。
Properties
spring.activemq.in-memory=false
如果配置代理URL,嵌入式代理也将被禁用,如下例所示:
Properties
spring.activemq.broker-url=tcp://192.168.1.210:9876
spring.activemq.user=admin
spring.activemq.password=secret
Properties
spring.jms.cache.session-cache-size=5
本地池配置
Properties
spring.jms.cache.session-cache-size=5
本地池配置
Properties
spring.activemq.pool.enabled=true
spring.activemq.pool.max-connections=50
本地池配置
1.2. ActiveMQ Artemis支持
链接配置
Properties
spring.artemis.mode=native
spring.artemis.broker-url=tcp://192.168.1.210:9876
spring.artemis.user=admin
spring.artemis.password=secret
Properties
spring.jms.cache.session-cache-size=5
本机池,可以通过向org添加依赖项来实现。messaginghub:池化jms并相应地配置JmsPoolConnectionFactory,如以下示例所示:Properties
spring.artemis.pool.enabled=true
spring.artemis.pool.max-connections=50
1.3使用JNDI连接工厂
如果您在应用程序服务器中运行应用程序,Spring Boot将尝试使用JNDI定位JMS连接工厂。默认情况下,会选中java:/JmsXA和java:/XAConnectionFactory位置。你可以使用弹簧。jms。如果需要指定替代位置,请使用jndi名称属性
Properties
spring.jms.jndi-name=java:/MyConnectionFactory
1.4 发送消息
Spring的JmsTemplate是自动配置的,您可以将其直接自动连接到自己的bean中
@Component
public class MyBean {
private final JmsTemplate jmsTemplate;
public MyBean(JmsTemplate jmsTemplate) {
this.jmsTemplate = jmsTemplate;
}
// ...
}
1.4 接收消息
当JMS基础结构存在时,可以使用@JmsListener对任何bean进行注释,以创建监听器端点。如果未定义JmsListenerContainerFactory,则会自动配置默认的JmsListenerContainerFactory。如果是DestinationResolver、MessageConverter或javax。jms。除非定义了Listener bean,否则它们会自动与默认工厂关联。
默认情况下,默认工厂是事务工厂。如果在存在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)
public class MyJmsConfiguration {
@Bean
public DefaultJmsListenerContainerFactory myFactory(DefaultJmsListenerContainerFactoryConfigurer configurer) {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
ConnectionFactory connectionFactory = getCustomConnectionFactory();
configurer.configure(factory, connectionFactory);
factory.setMessageConverter(new MyMessageConverter());
return factory;
}
private ConnectionFactory getCustomConnectionFactory() {
return ...
}
}
@Component
public class MyBean {
@JmsListener(destination = "someQueue", containerFactory = "myFactory")
public void processMessage(String content) {
// ...
}
}