RabbitMQ
RabbitMQ是消息队列,消息中间件,消息服务器,作为转发,缓冲和持久化操作
应用场景:
服务解耦:
随着规模扩大,服务之间的耦合度过于紧密,造成维护艰难而通过消息中间件,就不需要考虑发送方将数据发送指定位置了,而需要着从中去取
流量消峰:
在流量高频发的状态下,我们可以通过MQ进行流量消峰,避其锋芒,将请求放入队列中,排队等待处理从而减轻压力
异步调用:
在很多业务前提下,我们可能不能完全即使处理一整条服务,可以先将业务反馈给客户,然后后台继续处理业务
RabbitMQ的六种工作模式
1.简单模式
同一队列生产者和消费者一对一
2.工作模式
同一队列,多个消费者获取数据
1.通过负载均衡可以合理发送给所有消费者
2.合理分发消息通过手动ack进行消息回执,报告
3.Qos可以设置每次抓取数量
4.可以对队列和消息进行持久化,防止宕机的数据丢失
3.订阅模式
群发所有消费者
fanout交换机
生产者:1.定义交换机 2.交换机里发消息
消费者:1.定义交换机 2.定义自己独占随机队列 3.绑定 4.正常从随机队列接收数据
4.路由模式
关键字匹配,来确定消息发送到那个队列
定义direct(呆瑞可他)交换机
生产者:定义交换机,并携带路由键
消费者:定义交换机,定义队列,绑定路由键,正常接收
5.主题模式
和路由模式相同,具有特殊关键词
模糊查找模式,使用topic交换机
6.RPC异步调用模式
两个队列 1.调用队列 2.返回队列
调用数据时,携带返回队列的队列名
根据返回队列名,向正确的返回队列来发送结果
在此期间需要绑定一个关联ID
工作原理:客户端发送一条带有两个属性的消息,一个负责请求一个匿名独占队列
一个负责为每个请求的唯一id值
请求发送到队列
RPC工作进程在队列上等待请求,当请求出现,他执行任务,并使用其中的匿名队列结果返回客户机。
客户机在回应队列等待数据,当消息出现进行检查其制定的唯一id属性,如果匹配则向程序返回该响应数据
RocketMQ
RocketMQ除了可以流量消峰、系统解耦以外,支持事务性消息,可以达到数据一致性,支持18个级别的延迟消息,支持重复消费
RocketMQ如何达到与数据库的一致性事务
发送消息到MQ判断-进行DB操作(进入数据库操作)-判断是否DB成功-成功则提交-失败则回滚-结束