一、RabbitMQ中的一些概念
(1)Connection(连接)
与RabbitMQ建立连接,由ConnectionFactory创建每个Connection至于一个物理server进行连接,此链接基于Socket进行连接,可以理解为一个dbConnection
(2)Channel(通道)
在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务
(3)Exchange(交换器)
交换机,决定了消息路由规则,路由到哪个队列。
(4)Queue(队列)
消息队列载体,每个消息都会被投入到一个或多个队列。
(5)Bind(绑定器)
把exchange和queue按照路由规则绑定起来
(6)RoutingKey(路由关键字最多不能超过255个字符)
exchange根据这个关键字进行消息投递
二、消息队列使用过程
类型有4种,direct,fanout,topic,headers。其中headers不常用,本篇不做介绍,其他三种类型,会做详细介绍。
Note:消息从client发出,传送给交换器ChangeA,RoutingKey为routingkey.ZLH,那么不管你发送给Queue1,还是Queue2一个消息都会保存在Queue1,Queue2,Queue3,三个队列中。这就是交换器的direct类型的路由规则。只要找到路由器与routingkey绑定的队列,那么他有多少队列,他就分发给多少队列。
Note:消息从客户端发出,只要queue与exchange有绑定,那么他不管你的Routingkey是什么他都会将消息分发给所有与该exchang绑定的队列中。
(3)Exchange类型topic
*,代表任意的一个词。例如topic.zlh.*,他能够匹配到,topic.zlh.one ,topic.zlh.two ,topic.zlh.abc, ....
#,代表任意多个词。例如topic.#,他能够匹配到,topic.zlh.one ,topic.zlh.two ,topic.zlh.abc, ....
六、消息队列的消费与消息确认Ack
Note:如果一个消息队列中有大量消息等待操作时,我们可以用多个客户端来处理消息,这里的分发机制是采用负载均衡算法中的轮询。第一个消息给A,下一个消息给B,下下一个消息给A,下下下一个消息给B......以此类推。
ack应答有两种方式:1、自动应答,2、手动应答。具体实现如下。