中间件1.3.1-RabbitMQ入门及内部消息分发机制

精贴 置顶
2071 0
作者:      发布时间: 2020-04-29 11:34:11

RabbitMQ是一个开源的AMQP实现,服务器端用 Erlang语言编写,支持多种客户端。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。


AMQP协议

AMQP( Advanced Message Queuing Protocol)高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。


Module Layer位于最高层,主要定义了一些供客户端调用的命令,客户端可以利用这些命令实现自己的业务逻辑
Session Layer
位于中间层,主要负责将客户端的命令发送给服务器,再将服务端的应答返回给客户端,主要为客服端与服务器之间的通信提供可靠性同步机制和错误处理
Transport Layer位于最低层,主要传输二进制数据流,提供帧的处理、信道复用、错误检测和数据表示等。



RabbitMQ安装与配置

。。。。。。



RabbitMQ整体结构


Porducer

Producer:生产者,就是投递消息的一方。生产者创建消息,然后发布到Rabbitmq中。


消息一般可以包含两个部分:消息体和附加信息。


消息体( payload)

在实际应用中,消息体一般是一个带有业务逻辑结构的数据,比如一个JSON字符串。当然可以进一步对这个消息体进行序列化操作。


附加信息

用来表述这条消息,比如目标交换器的名称、路由键和一些自定义属性等等。



Broker

Broker:消息中间件的服务节点。


对于 Rabbitmq来说,一个 Rabbitmq Broker可以简单地看作一个 Rabbitmq服务节点,或者 Rabbitmq服务实例。也可以将一个 Rabbitmq Broker看作一台RabbitMQ服务器。


Virtual Host

Virtual Host:虎拟主机,表示一批交换器、消息队列和相关对象。虚拟主机是共享相同的身份认证和加密环境的独立服务器域。


每个 vhost本质上就是一个mini版的 Rabbitmq服务器,拥有自己的队列、交换器、绑定和权限机制。

vhost是AMQP概念的基础,必须在连接时指定, Rabbitmq默认的 vhost是/


Channel

Channel:频道或信道,是建立在 Connection连接之上的一种轻量级的连接。


大部分的操作是在 Channel这个接口中完成的,包括定义队列的声明 queue Declare交换机的声明 exchangedeclare、队列的绑定 queuebind、发布消息 basicpublish、消费消息 basic Consume等


如果把 connection比作一条光纤电缆的话,那么 Channel信道就比作成光纤电缆中的其中一束光纤。一个 connection上可以创建任意数量的 Channel


Routingkey

Routingkey: 路由键。生产者将消息发给交换器的时候,一般会指定一个Routingkey, 用来指定这个消息的路由规则。


Routingkey需要与交换器类型和绑定鍵(Bindingkey)联合使用在

交换器类型和绑定鍵( Bindingkey)固定的情况下,生产者可以在发送消息给交换器时,通过指定 Routingkey来决定消息流向哪里。


Exchange

Exchange:交换器,生产者将消息发送到 Exchange(交换器,通常也可以用大写的"X"来表示),由交换器将消息路由到一个或者多个队列中。如果路由不到,或返回给生产者,或直接丢弃。


Queue

Queue:队列,是 Rabbitmqp的内部对象,用于存储消息。


Binding

Binding:绑定, RabbitMQ中通过绑定将交换器与队列关联起来,在绑定的时候一般会指定一个绑定键( Bindingkey),这样RabbitMQ就知道如何正确地将消息路由到队列了。


Exchange类型

RabbitMQ常用的交换器类型有 fanout、 direct、 topic、 headers这四种


fanout:扇型交换机

它会把所有发送到该交换器的消息路由到所有与该交换器绑定的队列中


direct:直连交换机

它会把消息路由到那些 Bindingkey和 Routingkey完全匹配的队列中


topic:主题交换机

与direct类似,但它可以通过通配符进行模糊匹配


headers:头交换机

不依赖于路由键的匹配规则来路由消息,而是根据发送的消息内容中的headers属性进行匹配

headers类型的交换器性能很差,而且也不实用。


Consumer

Consumer:消费者,就是接收消息的一方。消费者连接到 Rabbitmq服务器,并订阅到队列上。


当消费者消费一条消息时,只是消费消息的消息体 payload)。在消息路由的过程中,消息的标签会丢弃,存入到队列中的消息只有消息体,消费者也只会消费到消息体,也就不知道消息的生产者是谁,当然消费者也不需要知道。



运转流程



RabbitMQ运转流程

image.png


生产者发送消息的过程:

  1. 生产者连接到 Rabbitmq Broker,建立一个连接( Connection),开启一个信道(Channel)

  2. 生产者声明一个交换器,并设置相关属性,比如交换机类型、是否持久化等

  3. 生产者声明一个队列井设置相关属性,比如是否排他、是否持久化、是否自动删除等









标签:

每日一句

如果花了足够多的时间考虑你的目标,你就能用自己的心看到、摸到、尝到和闻到那个目标,你不会轻易放弃。实现目标的欲望会给你足够的毅力克服哪怕是最令人生畏的障碍。在真的取得成功之前,你应该已经在头脑中达成目标。这样你就能承受任何暂时的痛苦,实现自己的梦想。

标签云

vue
最近综合
情绪巨婴是什么 12.18
普通蛋糕做法 05.31
玉米烤肠芝士面包做法 05.31
Mysql安装教程 - 绿色版 06.18
我们学习知识为什么总是忘记呢?【学习金字塔】 05.12
Typora开发版⽆法使⽤解决⽅法 05.04
为什么无知者越自信? -- 达克效应 05.10
马斯洛需求层次理论 04.29
随机综合
php 用万网空间,提交数据中出现反斜杠问题 04.13
Java学习总结(1.2.2) 线程安全之原子操作 03.20
[vue]npm启动导入/运行vue的项目 08.05
为什么无知者越自信? -- 达克效应 05.10
Java学习总结(1.1.2) 线程状态 03.17
Java学习总结(2.1.1) TCP/UDP协议 04.17
Java学习总结(1.3.4) 并发工具类详解 04.15
鸿蒙HarmonyOS DevEco Studio的安装教程 和 第一个项目 04.15