一、概述
消息队列作用:解耦、异步、削峰
解耦
解耦,就是将连个应用不是互相之间强依赖关系,一个挂了,两外一个依然可以使用
削峰
削锋,就是可以将高并发的网络请求 缓存到消息队中,慢慢的执行消息对对应的业务
618 秒杀购买商品
生成订单
扣减库存
扣减余额
发货,生成物流
如果以上 步骤都在一个应用的请求中去执行,在每秒 50000个并发的情况下,是否回对应服务造成很大的压力
优化流程
1.先扣减库存
2将对应商品生成订单的消息,发送到消息队列
3.让应用慢的消费消息 完成一下业务
异步
用户向服务发起请求,我们不会直接告诉用户结果,而是异步处理业务逻辑,稍后通过 通知的形式告诉用户
二、消息队列框架
常用消息队列框架:ActiveMQ,RocketMQ,Kafka,RabbitMQ。
RabbitMQ :特点 简单易用,支持多种语言,保证消息不丢失 可以配合作为分布式事务
Kafka: 特点是吞吐量非常大,适合大数据项目使用 支持多语言
RocketMQ:阿里出品,效率也很好,主要在spingcloud alibaba套件中使用,可以配合作为分布式事务
ActiveMQ:只支持java语言 很少用
三、RabbitMq
介绍
publisher (生产者) :负责生产消息,并且将消息 放到交换机
Exchange - 交换机:交互机 主要用来接收生产者 发送的消息 并且将消息发送给 路由
Routes - 路由:将接收到的消息 根据路由规则 ,发送到不同的消息队列(真正存储数据的地方)
Queue - 队列:就是存放消息的位置(存储再磁盘中)
Consumer - 消费者:负责 将队列中的消息读取出来
安装
使用docker 安装
1、创建
[root@mastera java2102]# mkdir docker-compose-rabbitmq
[root@mastera java2102]# cd docker-compose-rabbitmq/
[root@mastera docker-compose-rabbitmq]#
[root@mastera docker-compose-rabbitmq]# vim docker-compose.yaml
version: “3.1”
services:
rabbitmq:
image: daocloud.io/library/rabbitmq:management
restart: always
container_name: rabbitmq
ports:
- 5672:5672
- 15672:15672
volumes:
- ./data:/var/lib/rabbitmq
2、启动
[root@mastera docker-compose-rabbitmq]# docker-compose up
3、访问
在edge或者 火狐 不要再Google 访问
15672 后台管理界面 端口 http://192.168.12.130:15672/#/
5672 是客户端通信端口
四、RabbitMQ的通讯方式
1、最简单模式:一个生产者、一个消费者、一个队列
2、多个消费者共享队列模式:一个生产者 、一个队列、多个消费者共享 一个队列
3、发布订阅模式:一个生产者 多个队列,多个消费者
保证一个消息 可以被多个消费者,同时消费
4、路由模式:一个生产者、一个交换机、多个队列、多个消费者
5、topic 模式