Spring Boot 集成ActiveMQ消息系统

版权声明:本文为博主原创文章,转载请标注出处。 https://blog.csdn.net/qq27Ke/article/details/81839213

消息

Spring框架提供了消息系统扩展的广泛支持,从简单的JMS API的使用异步消息接收.Spring AMQP 提供为高级的消息队列协议提供了类似的特征集,Spring Boot 也为RabbitTeplate和RabbitMQ提供了可选的自动化配置,Spring WebSocket 也提供了对STOMP协议的实现,Spring Boot也能很好的支持apache的Kafka.

JMS

javax.jms.ConnectionFactory接口为JMS broker通信提供了一个创建连接(javax.jmsConnection)的标准工厂方法,虽然Spring需要一个连接工厂来使用JMS,但是不需要直接使用它,而是通过使用更高级的消息抽象接口,Spring Boot 可以通过注解的方式配置来接收和发送消息。

Spring Boot 对ActiveMQ 的支持

当配置了ActiveMQ的环境变量时,Spring Boot配置了连接工厂,如果这个代理已经存在,它会在容器启动时自动注入到连接工厂。
1,加载依赖

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-activemq -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-activemq</artifactId>
    <version>1.4.0.RELEASE</version>
</dependency>

2,ActiveMQ 基础配置信息是通过配置文件中spring.activemq.*来控制的:

spring.activemq.broker-url=tcp://192.168.1.210:9876
spring.activemq.user=admin
spring.activemq.password=secret

如果需要使用jms 连接池,需要添加org.apache.activemq:activemq-pool依赖,可以通过配置:

spring.activemq.pool.enabled=true
spring.activemq.pool.max-connections=50

3,Spring得JmsTemplate是自动配置,我们在代码中使用时只需要注入到对应得compentent中即可,发送消息:

@Autowired
private JmsTemplate jmsTemplate ;

@Value("${spring.activemq.destination}")
private String destination ;


public void sendMessage(String msg){
    jmsTemplate.send(destination,session -> session.createTextMessage(msg));
}

4,消费方代码:

@Component
public class MyBean {

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

}

如果你想创建更多的`JmsListenerContainerFactory实例或者重载默认实例,你可以通过Spring Boot 提供的DefaultJmsListenerContainerFactoryConfigurer 去初始化一个工厂,而不需要增加额外的配置,可以设置自己的MessageConverter:

@Configuration
@EnableJms
public class JmsConfiguration {


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

通过连接工厂的方式:

@Component
public class ReceiveMessageService {

    @JmsListener(destination = "${spring.activemq.destination}", containerFactory="myFactory")
    public void processMessage(String content) {

        System.out.println("**************************************************************************");
        System.out.println(content);
        System.out.println("**************************************************************************");

    }
}       

猜你喜欢

转载自blog.csdn.net/qq27Ke/article/details/81839213