springboot之activeMQ的使用

一、简介

springboot拥有着空前强大的整合能力,自然也对消息提供了支持。它整合了activeMQ。我们可以简单地引入依赖,通过注解来使用它。

二、依赖

<!--activemq-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-pool</artifactId>
    <version>${activemq-pool.version}</version>
</dependency>

如上,我们引入了activemq依赖,以及用于池化的依赖

三、配置外部服务端

消息的服务端一般是与程序分离的,所以虽然springboot内嵌了activeMQ,我们依赖选择外部配置,在application.properties文件中添加:

# activeMQ
spring.activemq.broker-url=tcp://IP:61616
spring.activemq.user=用户名
spring.activemq.password=密码
# pool
spring.activemq.pool.enabled=true
spring.activemq.pool.max-connections=50

四、点对点

springboot自动配置的activeMQ是默认点对点的,我们可以轻松定义生产者和消费者:

扫描二维码关注公众号,回复: 67783 查看本文章
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;
/**
* 生产者
*/
public void sendMessage() {
    jmsMessagingTemplate.convertAndSend(new ActiveMQQueue("queue1"), "message content");
}
/**
* 消费者
*/
@JmsListener(destination = "queue1")
public void consumeMessage(String message){
    System.out.println("consumer1: " + message);
}

如上,我们使用jmsMessageTemplate模板发送了点对点的消息,@JmsListener注解的方法用以消费消息。

五、发布订阅

Springboot默认是点对点的,所以如果我们要使用发布订阅需要自定义一个: JmsListenerContainerFactory的Bean

如:

   @Bean
    public JmsListenerContainerFactory myJmsListenerContainerFactory(ConnectionFactory connectionFactory){
        SimpleJmsListenerContainerFactory factory = new SimpleJmsListenerContainerFactory();
        // 开启发布订阅模式
        factory.setPubSubDomain(true);
        factory.setConnectionFactory(connectionFactory);
        return factory;
    }

那么使用的代码将改成如下的样子:

    @Autowired
    private JmsMessagingTemplate jmsMessagingTemplate;

    public void sendMessage() {
        jmsMessagingTemplate.convertAndSend(new ActiveMQTopic("topic"), "message content");
    }

    @JmsListener(destination = "topic", containerFactory = "myJmsListenerContainerFactory")
    public void consumeMessage(String message){
        System.out.println("consumer1: " + message);
    }

    @JmsListener(destination = "topic", containerFactory = "myJmsListenerContainerFactory")
    public void consumeMessage2(String message){
        System.out.println("consumer2: " + message);
    }

注意:

1)我们在创建Destination的时候用的是ActiveMQTopic实例而不是ActiveMQQueue实例,这表示一个topic消息;

2)@JmsListener注解中,我们将JmsListenerContainerFactory的bean实例添加到了containerFactory的注解上;

3)以及,我们定义了多个JmsListener用来消费消息。

猜你喜欢

转载自www.cnblogs.com/lay2017/p/8948166.html
今日推荐