RabbitMQ的介绍+Docker部署+Spring boot集成

消息队列MQ

出现原因:业务场景复杂了,很多场景单机的技术栈和中间件以及不够用了,需要引入消息队列中间件。消息队列就像一个先进先出的小盒子,有人可以往里面放东西,也有人从里面拿东西。

三个应用场景:

异步

流程复杂导致RT(响应时间)变长,为了优化,需要进行异步处理。

解耦

用线程去做异步,会导致系统的耦合性大,且因为系统耦合,很容易互相影响,出现bug难以维护。

使用mq,在完成流程中某一步时,只需把成功的消息告诉下一个的系统,下一个系统收到去处理就好。当然,相互之间不管,其实是消息队列的一个缺点,这就需要使用分布式事务。

削峰

流量在某一时刻可能会达到一个峰值,比如电商系统的秒杀活动,此时服务器,Redis,MySQL各自的承受能力都不一样,无法全部接收。

可以把请求放到队列里面,然后至于每秒消费多少请求,就看自己的服务器处理能力。能处理5000QPS就只是处理这么多,可能会导致系统的RT(响应时间)变长,但是不会导致服务器出现问题,等流量高峰下去了,你的服务也就没压力了。

三个主要缺点

系统复杂性

使用的过程中要考虑各种问题,比如消息重复消费、消息丢失、消息的顺序消费等等,导致系统复杂性增加。

数据一致性

所有的服务都成功才能算这一次请求是成功的,需要保证数据一致性,因此需要使用分布式事务:把所有服务都放在一个事务里面,保证事务的原子性,要成功一起成功,要失败一起失败。

可用性

MQ有可能出现各种问题,如果系统提供服务时,MQ出现问题,直接影响系统可用性。

RabbitMQ

一个开源的消息代理的队列服务器,用来通过AMQP协议在完全不同的应用之间共享数据。

AMQP协议

Server:服务端,用来接收客户端的连接
Connection:TCP连接。
Channel:信道,进行消息读写等操作在信道中进行,信道和TCP连接之间的关系相当于光纤和电缆,rabbitmq在一条TCP上建立多个信道对应多个线程,这个TCP被多个线程共享,每个线程拥有一个信道,信道在rabbit都有唯一的ID ,用来复用TCP连接。
Message:消息,应用程序和服务器之间传送的数据,就是开头说的要往小盒子里放的东西。
Exchange:交换器,接收消息,按照路由规则将消息路由到一个或者多个队列,就是提前商量好的,如何往小盒子里面放东西,是直接放到指定的小盒子?还是放到有某一个特征的的小盒子里面?还是放到所有小盒子里面?
Binding:绑定,交换器和消息队列之间的虚拟连接。其实就是一个对象,有三个属性,交换器、消息队列和RoutingKey(其实就是路由规则)。
RoutingKey:路由键,用来指定路由规则。
Queue:消息队列,用来保存消息,供消费者消费,就是开头说的小盒子。

RabbitMQ常用的交换器类型有direct、topic、fanout、headers四种。

rabbitmq的docker部署
官网地址
命令:

# latest RabbitMQ 3.10
docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.10-management

Spring boot集成rabbitMQ
https://blog.youkuaiyun.com/qq_35387940/article/details/100514134

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值