[rabbitMQ] 基本概念和分发策略

参考博客:

https://www.jianshu.com/p/79ca08116d57

https://www.cnblogs.com/williamjie/p/9481774.html

1.rabbitMQ的特点

可靠性:使用持久化(持久化至本地,重启节点时读取)、传输确认、发布确认机制来确保可靠。

灵活路由:使用交换器(Exchange)来确定将消息放入哪一个队列中,rabbitMQ有数种内置交换器,也可以自己实现交换器。

消息集群:多个服务器组成一个集群形成一个逻辑上的Broker。(处理消息时资源等级为borker->virtual host,每个vhost使用多个exchange和连接channel)

高可用性:可以在集群中设置队列镜像备份,使得部分节点出错时依然可用。

多协议支持:STOMP和MQTT等。

管理页面:以用的UI页面。

跟踪机制:可以最终消息异常问题。

插件机制:确保rabbitMQ的功能可扩展性。

2.基本概念

Message,消息,由消息头(可选属性,如优先级、delivery-mode、路由键等)和消息体(数据)组成。

Publisher,消息生成者。

Consumer,消费者。

Exchange,交换器,负责将消息按策略存入队列中。交换器可以被看做由多个绑定构成的路由表(根据消息头的路由键进行转发)。

Binding,绑定,关联交换器和消息队列。

Queue,消息队列,保存消息的地方。

Connection,连接,组件和外界通信的实际连接。

Channel,信道,因为建立和销毁TCP连接的开销较大,因此在TCP内部使用虚地址进行连接复用。对于同一个地址的不同通信需求使用多个信道完成。

Virtual Host,虚拟主机,每个虚拟主机拥有自己的队列、交换器、绑定,实际上是处理消息的最小单元。多个虚拟主机共享相同的身份认真和加密环境。

Broker,服务器的服务实例(一个Broker拥有多个Virtual Host,可以由多个物理节点组成)。

3.基本Exchange类型

direct

消息中的路由键如果和queues的binding key一致,则将消息直接放入消息队列中。

fanout

每个发到fanout交换器的消息都会分到所有队列上,使用起来类似于子网广播。

topic

将消息头的路由键和消息队列上的binding key做匹配(类似于正则匹配),找到匹配的消息队列后发送过去。

headers

不依赖routing key和binding key做匹配,而是根据消息头的属性进行匹配。

4.RabbitMQ模型

1. 生产者程序和消费者程序和消息队列服务建立连接和通道(一个进程使用一个连接,对一个队列的监听使用一个通道)。

2. 生产者或者消费者可以使用内置的四种exchange模板实例化exchange(并给予string标签),然后将exchange和消息队列绑定。

3. 生产者向高级消息队列broker发送请求,找到服务的virtual host并建立channel连接,指定接受消息的exchange。(即一个生产者可以和多个exchange连接)

4. exchange实例根据规则和binding key决定转发消息队列。

5. 消费者根绝exchange和消息队列名称建立channel连接并获取消息。

生产者过程

1)创建连接

2)创建通道

3)声明队列(并指定其交换机)

4)发送消息

消费者过程

1)创建连接

2)创建通道

3)声明队列

4)监听队列

5)接收消息

6)ACK回复

注:步骤5可以不光是接收消息,还有完成消息处理,这样可以保证消息处理完毕后再发送ACK,期间不会从队列接受到新的消息。

posted @ 2021-10-26 19:50  Cheung-10  阅读(8)  评论(0)    收藏  举报