MQ 消息队列:RabbitMQ
1. 概述
消息队列,即MQ,Message Queue。
消息队列是典型的:生产者、消费者模型。
- 消息队列:生产者/消费者模式实现。
- 生产者不断向消息队列中生产消息,
- 消费者不断的从队列中获取消息。
- 因为消息的生产和消费都是异步的
- 而且只关心消息的发送和接收,没有业务逻辑的侵入,这样就实现了生产者和消费者的解耦。
二. 实现方式:AMQP、JMS
MQ是消息通信的模型,并不是具体实现。现在实现MQ的有两种主流方式:AMQP、JMS。
- 两者间的区别和联系:
- JMS是定义了统一的接口,来对消息操作进行统一;AMQP是通过规定协议来统一数据交互的格式
- JMS限定了必须使用Java语言;AMQP只是协议,不规定实现方式,因此是跨语言的。
- JMS规定了两种消息模型;而AMQP的消息模型更加丰富
总的来说:
两种主流方式:AMQP、JMS
- AMQP:基于协议,要求消息格式,跨语言。
- JMS:基于Java接口,只支持Java。
三. 常见MQ产品
- ActiveMQ:基于JMS
- RabbitMQ:基于AMQP协议,erlang语言开发,稳定性好
- RocketMQ:基于JMS,阿里巴巴产品,目前交由Apache基金会
- Kafka:分布式消息系统,高吞吐量
四.RabbitMQ
RabbitMQ是基于AMQP的一款消息管理系统
五.下载&&安装
- 官网下载地址:http://www.rabbitmq.com/download.html
- 该路径是快速跳转下载页面,不需要自己到处找↓
- https://www.rabbitmq.com/install-windows.html#installer
- 目前最新版本是:3.8.3
- 下载位置提示
- RabbitMQ3.8.3对应的Erlang版本下载
erlang 版本 必须与 rabbitmq 版本匹配
-
rabbitmq 3.8.3 需要使用 erlang 22.x 版本
-
下载后是两个安装包:
安装erlang( 基于 erlang 语言编写的,需要先安装 erlang )
步骤一, 最好以管理员身份运行,进入安装页面
步骤二. 根据自己电脑情况选择位置, 后缀 \er\10.5最好不要删,改前面路径即可
最终点击完成即可
安装RabbitMQ
步骤一.进入下一步即可,不选
步骤二: 根据自身电脑存储位置放置即可,
后缀RabbitMQ Server最好别删,改前面路径即可
最终点击Install安装即可 , 即为安装完成
六.运行
步骤一. 点击Window键, 打开窗口,找RabbitMQ Server 文件夹下第一个程序
步骤二. 进入命令窗口
激活插件
rabbitmq-plugins.bat enable rabbitmq_management
步骤三:重启
net stop rabbitmq && net start rabbitmq
可能出现的问题:(如果没问题,一切正常,此解决方案可忽略,直接去步骤四)
1) 没有 ERLANG_HOME 配置
错误提示:没有ERLANG_HOME系统环境变量
解决方法:配置系统环境变量
2) 拒绝访问,发生系统错误5
错误描述:
问题分析:没有权限,需要使用管理员运行
解决方案:
以管理员运行cmd
3)不能加载erlang模块
错误描述
- 问题:erlang没有安装成功
- 解决办法:重新安装erlang
4)不能成功启动
错误描述
- 问题:端口号占用
- 解决版本:将与RabbitMQ相关的程序都结束,重新启动
5)服务名无效
错误描述:
- 问题:RabbitMQ没有安装成功
- 检查:服务中是否有 RabbitMQ
步骤四.然后即可查看服务是否启动成功
键盘输入win+R,输入命令 services.msc
键盘输入R ,自动跳转到服务位置查看即可
步骤五. 访问
1.输入 http://127.0.0.1:15672/
2. 默认账号登录:guest/ guest
3. 访问首页即为成功
七.环境搭建&&测试使用
1. 添加测试队列
然后就会多一条列表
2. IDEA 后端测试服务中 Pom.xml文件导入依赖配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
3. yml配置
spring:
rabbitmq:
host: 127.0.0.1
username: guest
password: guest
4. 创建生产者
在测试文件,创一个生产者类
@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestApplication.class)
public class TestProducer {
@Resource
private RabbitTemplate rabbitTemplate;
@Test
public void run1(){
rabbitTemplate.convertAndSend("","changgou_test","abc456");
}
}
然后运行, 运行成功后,再去网站RabbitMq控制台查看变化
5. 创建消费者
@Component //将监听器交于spring容器
@RabbitListener(queues = "changgou_test")
public class TestConsumer {
@RabbitHandler
public void run1(String message){
System.out.println("消费者dddd"+message);
}
}
然后运行启动器,即可
注意:
当你运行了启动器, 你再去生产者改别的数据测试时,你想去网站RabbitMQ看变化 ,会出现没变化的现象,此时不要慌,淡定,有我在
因为,你消费者也用启动器运行了,所以,它直接被调用了,数据来回比较快,等你点开这里看,人家消费者已经把数据拿走了
可以直接去后台启动器的控制台看展示数据即可
当这一步,恭喜你,顺利入门了,biubiu ,来个烟花庆祝一下,感谢捧场!
看完恭喜你,又知道了一点点!!!
你知道的越多,不知道的越多!
~感谢志同道合的你阅读, 你的支持是我学习的最大动力 ! 加油 ,陌生人一起努力,共勉!!