一、常用MQ:
RabbitMQ(兔子)、RocketMQ(火箭)、Kafka、ActiveMQ、HornetMQ(大黄蜂)
二、MQ存在的意义:
1.异步
传统:用户注册成功—>先调用短信服务---->再调用邮件服务
异步:用户注册成功—>多线程并发同时调用短信、邮件服务,等待返回结果
MQ : 用户注册成功—>发MQ,不等待返回结果---->异步读取消息,调用短信、邮件服务
2.解耦
传统:计划服务调用—审批流服务接口
MQ: 计划服务发MQ—mq----审批流服务接口
3.削峰平谷
队列只能有1万个请求,多余的等待
三、消息服务两个重要概念:
消息代理:message broker就是消息中间件的服务器
目的地:destination 消息发送的目的地
消息队列的目的地主要有两种形式:
- 队列:ptp point-to-point 点对点通讯模式
特点:只用一个queue收到消息 - 主题:sb publish/subscribe 发布/订阅模式
特点:可有多个queue收到消息
四、消息服务的两个规范:
1.JMS
JMS:Java Message Server
—— 基于JVM消息代理的规范。ActiveMQ、HornetMQ是JMS实现**
2.AMQP
AMQP:Advanced Message Queuing Protocol
—— 高级消息队列协议,也是一个消息代理的规范,兼容JMS。RabbitMQ是AMQP的实现。
3.区别:
主要是JMS是基于java,AMQP是跨语言、跨平台的:
五、RabbitMQ:
rabbitMQ是基于AMQP的实现
属性:
message:(消息)
publisher:(消息生产者)
exchage:(交换器)四种类型:direct(默认,单播,点对点)、fanout(扇出,广播)、topic(话题)、headers(不是用路由键判断,而是用amqp的消息头判断,很少用)
queue: (消息队列)
binding: (绑定) exchage与queue之间的关系,可多对多
connection:(网络连接),如tcp
channal:(信道),多路复用,建立tcp比较消耗性能,所以在一条tcp连接中创建多个信道
consumer:(消费者)
virtual Host: (虚拟主机)
broker:(服务器)
五、RabbitMQ运行机制:
direct(直接):单播,默认的
fanout(扇开):广播,最快的
topic(话题):模糊播
六、RabbitMQ安装运行:
1.下载镜像:docker pull rabbitmq:3.9.8-management
2.启动RabbitMQ:docker run -d -p 5672:5672 -p 15672:15672 --name myrabbitmq 719c9819aae8
注:-d表示后台运行;-p 5672:5672 为linux与mq容器映射端口; -p 15672:15672为客户端映射端口;–name myrabbitmq命名为myrabbitmq;
3.打开浏览器运行:
ip:15672 ip为服务器ip,端口为15672;如:http://192.168.80.88:15672
账号密码:guest guest
七、RabbitMQ使用:
原理:exchage(交换器)与queue(队列)之间binding(绑定)时,会有一个指明绑定规则的routing key(路由键A),发送的消息也会携带一个routing key(B),根据exchange的type,匹配routing keyA与routing keyB,匹配成功会向对应的queue发送消息:
exchange(交换器)的type有direct单播、fanout广播、topic模糊匹配、headers四种。
八、实战:springboot整合rabbitMQ
springboot整合rabbitMQ实战详情:传送门



