MQ:
Producer,Consumer,Broker以及NameServer;
producer:消息队列的生产者,需要与NameServer建立连接
Consumer:消息队列的消费者,同样与NameServer建立连接,
broker:消息队列的核心,负责信息的接收、存储、拉取。
NameServer:消息的协调者
Broker分为Master和Slave,一个Master可以对应多个Slave,Master与Slave的对应关系通过指定相同的BrokerName,不同的BrokerId来定义,BrokerId为0表示Master,非0表示Slave;
交换机类型:
直连交换机:Direct exchange
扇形交换机:Fanout exchange
主题交换机:Topic exchange
首部交换机:Headers exchange
交换机的作用:消息(Message)由Client
发送,RabbitMQ
接收到消息之后通过交换机
转发到对应的队列
上面。Worker
会从队列中获取未被读取的数据处理
1.通过TCP协议连接,为了避免开销,引入了通道
2.通道(Channel) tcp多路复用技术
第一层:物理层
第二层:数据链路层 802.2、802.3ATM、HDLC、FRAME RELAY
第三层:网络层 IP、IPX、APPLETALK、ICMP
第四层:传输层 TCP、UDP、SPX
第五层:会话层 RPC、SQL、NFS 、X WINDOWS、ASP
第六层:表示层 ASCLL、PICT、TIFF、JPEG、 MIDI、MPEG
第七层:应用层 HTTP,FTP,SNMP等
3.在RabbitMQ中每个生产者、消费者线程各把持一个信道,多个信道复用了同一个TCP 连接。当每个信道的流量不是很大时,复用单连接可以在产生性能瓶颈的情况下有效地节 TCP 连接资源。当信道本身的流量很大时,就会开辟多连接,将这些信道均摊到这些连接中
生产者消息投递过程
1.生产工者连接到Broker建立一个连接,开启一个通道;
2.生产者声明一个交换器,设置相关属性(是否排他、是否持久化、是否自动删除、消息最大过期时间、消息最大长度、消息最大字节数等)
3.生产者通过路由键将交换器和队列绑定
4.生产者将消息发送给Broker
5.交换器根据路由键查找相匹配的队列则将消息放入队列中,不然则根据生产者配置的属性选择丢弃还是回退给生产者
6.关闭信道
7.关闭连接
消费者消费消息过程
1、消费者连接到Broker ,建立一个连接,开启一个信道
2.消费者向 RabbitMQ Broker 请求消费相应队列中的消息,在这个过程中可能会设置消费者标签、是否自动确认、是否排他等
3.等待 RabbitMQ Broker 回应并投递相应队列中的消息, 消费者接收消息。
4.消费者确认接收到的消息
5.RabbitMQ从队列中删除相应己经被确认的消息
6.关闭信道
7.关闭连接