Rabbitmq 简介
一.核心组件
-
链接对象(connection)
当代码程序链接rabbitmq作为客户端操作的消息队列时,需要通过链接对象对接。
由于其在底层是一个基于tcp/ip协议的长链接,频繁销毁创建会消耗系统资源,所以通常我们需要在他身上获取一个短链接(channel)。
-
交换机(exchange)
消息的并发处理不是直接交给客户端去处理(客户端语言不同,并发能力也不同),而是统一由交换机接受客户端的消息。RabbitMQ使用erlang(一种并发语言)开发的,并发能力稳定,并发性能高。
RabbitMQ中存在四种交换机模式:
-
直连交换机:Direct exchange
-
扇形交换机:Fanout exchange
-
主题交换机:Topic exchange
-
首部交换机:Headers exchange
-
-
队列(queue)
队列是rabbitmq里接受存储消息对象的组件,其必须绑定一个交换机。
当交换机接受到客户端发送的消息时,会根据路由逻辑判断当前消息发送给哪个/哪些队列。把消息封装成对象,最终发送到队列
二. 客户端角色
所有能链接rabbitmq的软件,代码,插件都可以是rabbitmq的客户端,根据客户端功能不同,可以区分成不同的角色。
-
生产者productor
生产者负责将客户端准备好的消息发送到rabbitmq。
-
消费者consumer
消费者监听队列,从队列中拿到已经存储的消息对象,进行客户端的消费逻辑.
-
无角色
如果客户端连接上rabbitmq 没有发送消息,也不需要接收消费消息,就是无角色的客户端。无角色客户端可以实现通过链接来声明组件。
exchange不是自动生成来给你使用的,不同的系统,不同的客户端可以有不同的自定义的交换机,对于queue也是一样。
组件的创建过程也是由客户端完成的.
三. 五种工作模式
-
简单模式
简单模式中每个队列只被一个消费端监听。
生产端负责发送消息到交换机,明确表明路由目的地。交换机接收到消息,根据路由目的转发。消费端负责监听到这个队列,一旦发现消息则执行消费逻辑。
适用于发短信/邮件,这种一发一接的应用场景。
-
争抢模式
争抢模式中,消息队列可以由多个消费端同时监听形成争抢。
使用场景:抢红包
-
路由模式
路由模式中,交换机将会按照消息的路由Key转发消息。
生产端将携带路由key(目的地)的消息发送到交换机。交换机(类型为:direct)根据消息的路由key匹配队列,一旦匹配上了就将消息转发出去。消费端可以一对一监听,也能一对多监听。
对应于直连交换机
注:交换机不会存储消息,若没有匹配到或发送完毕,消息就直接删除了。
-
发布订阅
发布订阅模式中,交换机不再判断路由,而是将消息发送给后端所有绑定他的队列,即群发。
对应于扇形交换机
可以应用于邮件群发
-
主题模式
主题模式中,队列绑定交换机时使用的是一个范围key。(发布订阅中使用的是明确的key)
对应于主题交换机
后端队列绑定交换机使用特殊符号代替路由key字符串:
- #:表示任意多级的任意长度字符串
- *:表示一级的任意字符串
应用场景:物流分拣。