SpringBoot-ActiveMQ消息列队

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) {
        // ...
    }

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值