SpringBoot整合ActiveMQ消息队列

首先要讲什么是ActiveMQ:AciveMQ是Apache出品的目前最流行,能力强劲的开源消息总线

主要功能:

1、 解决服务之间代码耦合
2、 使用消息队列,增加系统并发处理量

主要应用场景:

1、 当系统使用短信平台、邮件平台的时候。
2、 当系统使用搜索平台、缓存平台的时候。

总结一下就是使用MQ作为系统间数据调用的中转站

在Spring Boot中集成ActiveMQ相对还是比较简单的,都不需要安装什么服务,SpringBoot内置是提供了AciveMQ的,默认使用内存的activeMQ,当然配合外置ActiveMQ Server会更好。

使用外置ActiveMQ 流程:

首先你需要去官网下一个 ps:楼主用的是5.14.2版本的 现在官网最新版是5.15.8

在这里插入图片描述
安装包下载完成后解压后 就是这个样子了 (注意一定要解压到全英文路径下的包内)

打开你的bin目录

在这里插入图片描述

打开你系统对应位数的目录,熊局长的是64位的
在这里插入图片描述

双击activemq.bat启动

在这里插入图片描述

点完之后会自动弹出来doc启动,稍等一下 如果你最后跟我的一样 说明启动成功了

在这里插入图片描述

启动成功之后,在你的浏览器中访问http://localhost:8161/ 就能访问到ActiveMq的页面咯
点击画红线的选项,会弹出一个登陆框,账号和密码都是 admin

在这里插入图片描述

登陆成功后就是这样子了,会有两个队列,topic 和 queue队列 点进去就能查看详情,如果你在后台创建队列 这边就会实时显示 让你查看

在这里插入图片描述

要注意

ActiveMQ使用的是标准生产者和消费者模型

1、Queue 队列(P2P消息模型) ,生产者生产了一个消息,只能由一个消费者进行消费 :给微信好友发消息
2、Topic 主题/广播(Pub/Sub消息模型),生产者生产了一个消息,可以由多个消费者进行消费

后端:

在SpringBoot中整合ActiveMQ是非常简单的

1:在你的pom.xml中导入依赖

<!-- ActiveMQ的启动器 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-activemq</artifactId>
    </dependency>

2.在application.properties中添加mq的配置

# MQ所在的服务器的地址
spring.activemq.broker-url=tcp://127.0.0.1:61616
# 是否使用内置的MQtrue  使用; fale  不使用
spring.activemq.in-memory=false 
# 是否在回滚回滚消息之前停止消息传递。这意味着当启用此命令时,消息顺序不会被保留。
spring.activemq.non-blocking-redelivery=false
# 用户名
spring.activemq.password=admin
# 密码
spring.activemq.user=admin

3.在你需要编写生产者和消费者的系统中都要创建你的ActiveMQConfig

package com.czxy.config;
import javax.jms.Queue;
import javax.jms.Topic;
import org.apache.activemq.command.ActiveMQQueue;
import org.apache.activemq.command.ActiveMQTopic;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ActiveMQConfig {
	@Bean
	public Queue queue() {
		 return new ActiveMQQueue("czxy.queue");
	}
	@Bean
	public Topic topic() {
		return new ActiveMQTopic("czxy.topic");
	}
}

消息的生产者:

/**
  * 消息的生产者 
  * @author Administrator
  *
  */
@Componet
@EnableScheduling
public class QueueProducer {  
	/*
	 * @Autowired // 也可以注入JmsTemplate,JmsMessagingTemplate对JmsTemplate进行了封装
	 * private JmsMessagingTemplate jmsTemplate; //
	 * 发送消息,destination是发送到的队列,message是待发送的消息
	 * 
	 * @Scheduled(fixedDelay=3000)//每3s执行1次 
	   public void sendMessage(Destination destination, final String message){
	      jmsTemplate.convertAndSend(destination, message); 
	   }
	 */

    @Autowired
    private JmsMessagingTemplate jmsMessagingTemplate;

    @Autowired
    private Queue queue;

    @Scheduled(fixedDelay=3000)//每3s执行1次
    public void send() {
       try {
		
		   MapMessage mapMessage = new ActiveMQMapMessage();
		   mapMessage.setString("info", "你还在睡觉");
		   
		   this.jmsMessagingTemplate.convertAndSend(this.queue, mapMessage);
		   
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }
}  

消息的消费者:

/**
 * 消息的消费者
 * @author Administrator
 */
@Component  
public class QueueConsumer {  
    //使用JmsListener配置消费者监听的队列,其中Message是接收到的消息  
	@JmsListener(destination = "czxy.queue")  
    public void receiveQueue(Message message) {
		try {
			MapMessage mapMessage = (MapMessage) message;
			String info = mapMessage.getString("info");
			System.out.println(info);
		} catch (Exception e) {
			e.printStackTrace();
		}
    } 
}

启动,测试,ok

需要注意事项

根据需要创建一个ActiveMQ的生成者,在创建生产者的项目内创建一个ActiveMQconfig在config中定义好ActiveMQ的队列名
在需要接受的地方创建一个消费者,这个消费者的名字一定要根据对应生产者config的对列名,
需要注意事项:创建消费者的监听类的时候一定要记得在类名上添加@Component注释以启动监听状态,否则是找不到消费者的客要讲的就是怎么采用外置的ActiveMQ,

有不太明白的地方请留言,如果这篇博客帮助到了你,请关注我,我会不定时的分享一些干货的

猜你喜欢

转载自blog.csdn.net/weixin_43752064/article/details/84846323