SpringBoot - 整合ActiveMQ

简介

Apache ActiveMQ是一个开源的消息中间件,它不仅完全支持JMS1.1规范,而且支持多种编
程语言,例如C/C++、C#、Delphi 、Erlang 、Adobe Flash 、Haskell 、Java 、JavaScript 、Perl 、 PHP 、Pike 、Python 和 Ruby 等,也支持多种协议,例如 OpenWire 、REST 、STOMP 、WS-Notification 、MQTT 、 XMPP 以及 AMQP 。 Apache ActiveMQ 也提供了对Spring框架的支持,可以非常容易地嵌入Spring中,同时它也提供了集群支持。

一、引入依赖

<!-- ActiveMQ -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<!-- ActiveMQ连接池 -->
<dependency>
	<groupId>org.messaginghub</groupId>
	<artifactId>pooled-jms</artifactId>
</dependency>
特别说明

使用springboot2.0+及以下版本时候,连接池依赖如下:

<dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-pool</artifactId>
</dependency>

二、yml配置文件

spring:
  activemq:
    broker-url: tcp://127.0.0.1:61616
    user: admin
    password: admin
    packages:
      trust-all: true        # 信任所有包,支持对象消息
    pool:
      enabled: true          # 使用连接词
      max-connections: 10    # 连接池最大连接数
      idle-timeout: 30000ms  # 空闲连接过期时间,默认30

三、ActiveMQ的配置文件

@EnableJms
@Configuration
public class ActiveMQConfig {
    /**
     * Queue消息队列
     */
    @Bean
    public Queue queue(){
        return new ActiveMQQueue("active.queue");
    }

    /**
     * Topic消息队列
     */
    @Bean
    public Topic topic(){
        return new ActiveMQTopic("active.topic");
    }

    /**
     * Topic类型的消息必须配置Factory
     */
    @Bean
    public JmsListenerContainerFactory jmsTopicListenerContainerFactory(ConnectionFactory connectionFactory){
        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory);
        factory.setPubSubDomain(true);
        return factory;
    }
    
    @Bean(name = "test")
    public Queue queueTest(){
        return new ActiveMQQueue("active.test");
    }
    
}
特别说明

上面的配置文件里,配置了一个@Bean(name = "test"),是因为我在看其他博文的时候,评论里有说:这就两个两个队列啊,其他名的队列怎么办?我想可能是Spring没学好或是忘记了怎么注入带name@Autowired默认是按照类型注入,如果你想按name注入,只需要再加一个@Qualifier("name")注解即可。或是使用@Resource(name = "name")代替@Autowired@Qualifier就行。

四、创建消息Pojo类

要想能发送和接收对象消息,Pojo类需要实现序列化接口。

@Data
public class Message implements Serializable {
    private String content;
    private Date date;

    public Message(String content, Date date) {
        this.content = content;
        this.date = date;
    }
}

五、发送与监听消息

JmsMessagingTemplate是由 Spring 提供的一个JMS 消息发送模板,可以用来方便地进行消息
的发送,消息发送方法convertAndSend的第一个参数是消息队列 ,第二个参数是消息内容。

@Component
public class JmsComponent {
    @Autowired
    private JmsMessagingTemplate template;
    @Autowired
    private Queue queue;
    @Autowired
    private Topic topic;

//    @Autowired
//    @Qualifier("test")
    @Resource(name = "test")
    private Queue queueTest;

    /**
     * 发送Queue消息
     */
    public void sendQueueMessage(Message msg){
        template.convertAndSend(this.queue,msg);
    }

    /**
     * 发送Topic消息
     */
    public void sendTopicMessage(Message msg){
        template.convertAndSend(this.topic,msg);
    }

    /**
     * 监听active.queue队列的消息
     */
    @JmsListener(destination = "active.queue")
    public void receiveQueueMessage(Message msg){
        System.out.println("收到消息:" + msg);
    }

    /**
     * 监听active.topic队列的消息
     */
    @JmsListener(destination = "active.topic",containerFactory = "jmsTopicListenerContainerFactory")
    public void receiveTopicMessage(Message msg){
        System.out.println("收到消息:" + msg);
    }

}

六、测试

@RunWith(SpringRunner.class)
@SpringBootTest
public class TestActiveMQ {
    @Autowired
    private JmsComponent jmsComponent;

    @Test
    public void testQueueMessage(){
        Message message = new Message("发送Queue消息",new Date());
        jmsComponent.sendQueueMessage(message);
    }

    @Test
    public void testTopicMessage(){
        Message message = new Message("发送Topic消息",new Date());
        jmsComponent.sendTopicMessage(message);
    }
}
测试截图

在这里插入图片描述
在这里插入图片描述
更多关于ActiveMQ,可以自行百度,或是可以参考从0开始Web开发实战】SpringBoot集成ActiveMQ,详细代码手把手操作

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值