RabbitMQ

1.概念

消息(Message)是指在应用间传送的数据。

消息队列(Message Queue)是一种应用间的通信方式,消息发送后可以立即返回,由消息系统来确保消息的可靠传递。消息发布者只管把消息发布到 MQ 中而不用管谁来取,消息使用者只管从 MQ 中取消息而不管是谁发布的。这样发布者和使用者都不用知道对方的存在。

消息中间件(Message-Oriented Middleware)是指利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。(多个系统之间用了通讯的一种方式)

 

2.作用

a.实现异步

为什么不用多线程?多线程增加服务压力,对线程的维护开销较大。

 

b.实现解耦:原来要按顺序调用,现在顺序无关

c.流量削峰:防止短时的请求导致服务崩溃,将请求进行排队处理,如果超出请求队列大小,则抛弃请求跳转到错误页

d.实现广播

 

3.概念

AMQP概念:

AMQP实体模型:

channel:每个消费者和服务建立tcp连接,建立连接和释放连接会消耗大量资源,所以引入channel,建立连接后不进行释放,后续消息传递都在channel上进行。

4.三种主要Exchange(交换机)类型

a.Direct Exchange(直连)

b.Topic Exchange(主题模式)

c.Fanout Exchange(广播)

 

5.细节

a.队列重复声明:如果属性完全相同,再重复声明队列,会直接返回成功,但是修改不同属性会报错

注:队列在声明(declare)后才能被使用。如果一个队列尚不存在,声明一个队列会创建它。如果声明的队列已经存在,并且属性完全相同,那么此次声明不会对原有队列产生任何影响。如果声明中的属性与已存在队列的属性有差异,那么一个错误代码为406的通道级异常就会被抛出。

b.消费者acknowledge:如果消费者不返回确认消息,则该消息不会消失,会造成重复消费的问题(消费者一直获取同一个消息进行处理)

c.不满足路由规则的消息:会被直接丢弃

d.消息持久化:如果要做持久化,必须Exchange和Queue都做持久化(durable:true),如果一个是true一个是false,则不允许绑定

e.多个消费者监听一个队列:会造成轮询消费(一个消费者消费一个,另一个消费者消费下一个)

发表评论

邮箱地址不会被公开。 必填项已用*标注