https://www.kuangstudy.com/zl/rabbitmq#1366709722819948546
MQ消息队列有如下几个角色:
1、生产者
2、存储消息
3、消费者
一. 分发模式
1.发布订阅:生产者发送消息到消息队列进行存储,消费者们只要订阅了,就会收到消息队列中的消息,是一种推的机制。这是它一个最基础的功能。
2.轮询分发:生产者将消息投递到消息队列,消息队列会按照一定的机制将消息推送给消费者,而这种规则呢是一种公平的分发;并不会因为消费者的延时而造成他的不公平性(不论你的服务器性能怎么样,都会是公平的,消息队列中的消息平均分发,不会造成数据的倾斜),一旦有一个消费者消费了消息,后面的消费者就不会重复的去消费消息;自动应答。
3.公平分发:公平分发会按照服务器的性能来分配,快的消费多一点,慢的消费少一点(能者多劳);会造成数据的倾斜;一旦有一个消费者消费了消息,后面的消费者就不会重复的去消费消息;需要手动应答。
4.重发:当app创建了订单,但是订单系统出现了故障,这个时候我们的消息队列中会有一个应答机制,它没有收到消费成功的反馈(如:消费的服务器出现故障),就会造成消息的堆积,但是堆积的消息不会删除掉,它会重新发送给另一个消费的服务器来进行消费,以此类推;它的目的就是为了保证消息的一个可靠性(KafKa不支持重发)。
5.消息拉取:rbc通讯机制,消息被动拉取。
二.AMQP协议
1.生产者
2.消费者
三.RabbitMq的主要组成
Server:又称Broker ,接受客户端的连接,实现AMQP实体服务。 安装rabbitmq-server
Connection:连接,应用程序与Broker的网络连接 TCP/IP/ 三次握手和四次挥手
Channel:网络信道,几乎所有的操作都在Channel中进行,Channel是进行消息读写的通道,客户端可以建立对各Channel,每个Channel代表一个会话任务。
Message :消息:服务与应用程序之间传送的数据,由Properties和body组成,Properties可是对消息进行修饰,比如消息的优先级,延迟等高级特性,Body则就是消息体的内容。
Virtual Host 虚拟地址,用于进行逻辑隔离,最上层的消息路由,一个虚拟主机理由可以有若干个Exhange和Queueu,同一个虚拟主机里面不能有相同名字的Exchange
Exchange:交换机,接受消息,根据路由键发送消息到绑定的队列。(不具备消息存储的能力)
Bindings:Exchange和Queue之间的虚拟连接,binding中可以保护多个routing key.
Routing key:是一个路由规则,虚拟机可以用它来确定如何路由一个特定消息。
Queue:队列:也成为Message Queue,消息队列,保存消息并将它们转发给消费者。
消息模式
03-1、简单模式 Simple
参考第12章节
03-2、工作模式 Work
web操作查看视频
类型:无
特点:分发机制
03-3、发布订阅模式
web操作查看视频
类型:fanout
特点:Fanout—发布与订阅模式,是一种广播机制,它是没有路由key的模式。
03-4、路由模式
web操作查看视频
类型:direct
特点:有routing-key的匹配模式
03-5、主题Topic模式**
web操作查看视频
类型:topic
特点:模糊的routing-key的匹配模式
03-6、参数模式
web操作查看视频
类型:headers
特点:参数匹配模式
##分发模式
1默认轮询分发 默认 每个服务器不论性能一个一个分发接收
2公平分发 应答机制必须是手动应答 autoACk=false 并且手动应答 ,且设置qs qs默认轮询分发
qs=1 (没次可以从rabbitmq取出的数据,更具服务器性能设置,不能太大)且手动应答 公平分发