流程图
流程解释
1:生产者通过 ip 地址,端口号(5672),用户名和密码信息连接到 RabbitMQ,建立一个连接(TCP),开启一个信道(Channel)。
2:通过信道声明一个交换机,并设置其类型和是否持久化等信息。
交换机类型:Direct,Fanout,Topic,Headers
不同类型的交换机有不同的匹配规则,当交换机接收到生产者的信息时,检测所有与自身绑定的队列的Bindingkey ,只有 Bindingkey 和 Routingkey 匹配成功后,交换机才会将消息转发到此队列。
Direct:当 Bindingkey == Routingkey 时才算匹配成功,类似单播。
Fanout:所有与自身绑定的队列均匹配成功,类似子网广播。
Topic:Bindingkey 与 routingkey 以某种模式进行模糊匹配,通常在 Bindkey 中用通配符 “#” 匹配一个或多个词,“%”匹配一个词。例如 ‘aaa.#’ 可以匹配到’aaa.bbb.ccc’ ,'aaa.%‘可以匹配到’aaa.bbb’,类似组播。
Headers:根据发送的消息内容中的headers属性进行匹配,headers属性是一个键值对,以x-match规则进行匹配。匹配规则x-match 有两种类型。(很少用)
(1) x-match = all :表示所有的键值对都匹配才能接受到消息
(2) x-match = any :表示只要有键值对匹配就能接受到消息
3:通过信道声明队列并设置其相关属性(是否持久化)
4:通过信道将交换机和队列绑定起来,并设置 Bindingkey 信息。
5:此时信道基本信息设置完毕,当生产者携带 Routingkey 发送信息到 rabbitmq 时,交换机通过 Routingkey 和 自身匹配规则找到匹配的队列。如果找到匹配的队列,则将生产者发来的消息存入该队列。未找到匹配的队列,则根据生产者的配置来决定要返回给生产者还是直接丢弃。
6:生产者成功将消息存入队列中,消费者开始进行队列消息的处理。
7:和生产者一样,消费者通过 ip 地址,端口号(5672),用户名和密码信息连接到 RabbitMQ,建立一个连接,开启一个信道(Channel)。
8:消费者向 RabbitMQ 监听并请求消费队列中的消息,等待 RabbitMQ 回应并发送信息给消费者进行处理,消费者接收到信息后返回确定(ack)信号,RabbitMQ 从队列中删除对应信息。(RabbitMQ默认轮询分配信息给消费者,但注意一条信息只能由一个消费者进行处理)
9:结束时,生产者,消费者关闭信道,断开连接。