AMQP协议

● 生产者(Producer):发送消息的应用。
● 消费者(Consumer):接收消息的应用。
● 队列(Queue):存储消息的缓存,一个队列queue存多条消息。
● 消息(Message):由生产者通过RabbitMQ发送给消费者的信息,消息存储在消息队列queue中。
● 连接(Connection):连接RabbitMQ和应用服务器的TCP连接(上图中发送消息和接收消息都是必须先建立连接的)。
● 通道(Channel):连接里的一个虚拟通道。当你通过消息队列发送或者接收消息时,这个操作都是通过通道进行的。
● 交换机(Exchange):生产者发送消息是先发到交换机,再由交换机发送到队列里面,并最终保存在队列里面。就好比寄快递,台湾寄到长沙,可能要先寄到上海,那么上海就是这个交换机。

● 绑定(Binding):绑定是队列和交换机的一个关联连接。
● 路由键(Routing Key):路由键是供交换机查看并根据键来决定如何分发消息到列队的一个键。路由键可以说是消息的目的地址。
● 用户(Users):在RabbitMQ里,是可以通过指定的用户名和密码来进行连接的。每个用户可以分配不同的权限,例如读权限,写权限以及在实例里进行配置的权限。
rabbitmq各个模块的概念
● Broker(代理、分发):接收和分发消息的应用,RabbitMQ 就是 Message Broker,接受客户端 的连接。
● Virtual Host:虚拟 Broker,将多个单元隔离开。可以理解为虚拟地址,用于进行逻辑隔离,是最上层的消息路由。一个Virtual host里面可以有若干个Exchange和Queue,同一个 Virtual Host 里面不能有相同名称的 Exchange或 Queue。
● Connection: publisher/consumer 和 broker 之间物理的 TCP 连接。
● Channel:connection 内部建立的逻辑连接,通常每个线程创建单独的channel。
● Routing Key: 路由键,用来指示消息的路由转发,相当于快递的地址。
● Exchange:交换机,接收消息,根据路由键转发消息到绑定的队列中。相当于快递的分拨中心(根据 Routing Key把消息发送哪个队列)
● Queue:也称为 Message Queue(消息队列),消息最终被送到这里等待consumer(消费者) 取走。
● Binding: exchange和queue之间的虚拟连接,用于message的分发依据。
Exchage类型
Direct Exchange(直连交换机)
所有发送到 Direct Exchange 的消息被转发到 RouteKey 中指定的 Queue。 也就是消息中的 Routing Key 如果和 Binding Key 一致,Direct Exchange 则将消息发到对应的 queue 中

通过 Routing Key 为 naicha 的路由键发送消息给交换机,交换机会去查找 Binding Key 也是 naicha 的队列,而与 naicha 绑定的队列是 milktea,将消息转发到名为 milktea 的队列中去。
Fanout Exchage(扇形交换机)
每个发到 Fanout Exchange 的 消息都会分发到所有与该交换机绑定的 queue 上去。Fanout 交换 机转发消息是最快的,因为它不处理路由键,只需要简单的将队列绑定到交换机上。
topic Exchage(主题交换机)
根据 Routing Key 及通配规则,Topic Exchange 将消息分发到目标 Queue 中。
全匹配:与 Direct 类似
Binding Key中的 #:匹配任意个数的单词
Binding Key中的 *:匹配任意 1 个单词
例如:
log.# 能够匹配到 log.info.oa
log.* 只会匹配到 log.erro
集群模式
普通集群模式
只会同步元数据,如果消费消息时,该实例没有保存该消息,则会拉取消息来进行同步。
镜像集群模式
每次都会同步所有的消息和元数据。
如何保证消息一定能发送到broker
生产者端,设置两个监听器,一个是confirm,一个是return。前者确定生产者投放成功或者失败的处理逻辑,后者是无法路由到任何队列的情况。

标签: none

已有 6 条评论

  1. 不错不错,我喜欢看 https://www.jiwenlaw.com/

  2. 怎么收藏这篇文章?

  3. 看的我热血沸腾啊https://www.237fa.com/

  4. 想想你的文章写的特别好https://www.ea55.com/

  5. 不错不错,我喜欢看 www.jiwenlaw.com

  6. 哈哈哈,写的太好了https://www.cscnn.com/

添加新评论