| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> RabbitMQ概念 AMQP模型 -> 正文阅读 |
|
[大数据]RabbitMQ概念 AMQP模型 |
引言: ? ? ? ? AMQP全称是Advanced Message Queuing Protocol,它是一个(分布式)消息传递协议,使用和符合此协议的客户端能够基于使用和符合此协议的消息传递中间件代理, RabbitMQ实现的AMQP版本是0.9.1?AMQP 0-9-1协议,这是RabbitMQ支持的协议之一,是一种消息传递协议同时,AMQP 0-9-1是一个可编程协议。?理解AMQP 0-9-1协议,有助于理解RabbitMQ实现原理 AMQP 0-9-1模型图AMQP 0-9-1协议定义的模型如下图所示,消息被发布给Excharges ,Excharge 通常比做邮局或者邮箱,Excharge通过规则将消息副本发送给队列,代理然后将消息传递给订阅队列的消费者,或者消费者主动从队列中提取消息, 发布者在发布消息的时候可以指定消息属性(消息元数据),某些消息元数据可能由消息中间件代理使用,其他消息元数据对于消息中间件代理而言是不透明的,仅供消息消费者使用。 由于网络是不可靠的,客户端可能无法接收消息或者处理消息失败,这个时候消息中间件代理无法感知消息是否正确传递到消费者中,因此AMQP模型提供了消息确认(Message Acknowledgement)的概念:当消息传递到消费者,消费者可以自动向消息中间件代理确认消息已经接收成功或者由应用程序开发者选择手动确认消息已经接收成功并且向消息中间件代理确认消息,消息中间件代理只有在接收到该消息(或者消息组)的确认通知后才会从队列中完全删除该消息。 在某些情况下,交换器无法正确路由到队列中,那么该消息就会返回给发布者,或者丢弃,或者如果消息中间件代理实现了"死信队列(Dead Letter Queue)"扩展,消息会被放置到死信队列中。消息发布者可以选择使用对应的参数控制路由失败的处理策略。 AMQP 0-9-1模型概念Exchanges (交换器)Exchange 是接收消息的实体,它接收消息然后将其路由到0个或者多个队列中,路由的算法取决于exchange type 和具体路由规则,RabbitMQ消息中间件代理支持四种类型的交互器
除了交换器类型以外还需要声明其他属性,例如:名称,持久性,是否删除,参数等 Direct exchange 直连交换器直连交换器是一种基于路由秘钥(routing key)将消息发送给队列的交换器,他的工作方式很简单,一个队列使用秘钥为K 绑定交换器直连交换器收到一条路由秘钥是R的消息,当R=K的时候,此消息放入队列中,直连交换器通常用于以循环方式在多个工作人员之间分配任务,值得注意的是AMQP 0-9-1模型中消息是在消费者之间实现负载均衡并不是在队列之间实现负载均衡 Default Exchange默认交换器 默认交换器是一种特殊的直连交换器,它的名称是空字符串(也就是""),它由消息中间件代理预声明,创建的每个队列都自动用一个与队列名相同的路由键秘钥绑定到默认交换器,所有的队列都可以通过默认交换器进行消息投递,只需要指定路由键为相应的队列名即可,这样就看起来消息直接传递给了队列 Fanout Exchange 扇出交换器扇出交换器处理时会忽略消息秘钥,将消息发送给绑定它的所有队列,例如N个队列绑定一个扇出交换器,扇出交换器收到消息后会将消息副本传递给N个队列,扇出交换器是消息广播路由的理想选择 因为扇出交换将消息的副本传递给绑定到它的每个队列,所以使用非常广泛
? Topic exchange 主题交换器主题交换基于配对匹配的消息路由键,将消息路由到一个或多个队列。绑定队列和交换器的Topic模式(这个模式串其实就是声明绑定时候的路由键和消息发布的路由键并非同一个)一般使用点号(dot,也就是'.')分隔,例如source.target.key,绑定模式支持通配符:
对每一条消息,Topic交换器会遍历所有的绑定关系,检查消息指定的路由键是否匹配绑定关系中的路由键,如果匹配,则将消息推送到相应队列。 主题交换类型通常用于实现各种发布/订阅模式变体。主题交换通常用于消息的多播路由。主题交换有非常广泛的用例集。当一个问题涉及多个消费者/应用程序,这些消费者/应用程序选择性地选择他们想要接收的消息类型时,应该考虑使用主题交换。 示例用途:
Headers exchange 头部交换器交换器不处理路由键。而是根据发送的消息内容中的headers属性进行匹配。在绑定Queue与Exchange时指定一组键值对;当消息发送到RabbitMQ时会取到该消息的headers与Exchange绑定时指定的键值对进行匹配;如果完全匹配则消息会路由到该队列,否则不会路由到该队列。headers属性是一个键值对,可以是Hashtable,键值对的值可以是任何类型。而fanout,direct,topic 的路由键都需要要字符串形式的。 匹配规则x-match有下列两种类型: x-match = all :表示所有的键值对都匹配才能接受到消息 x-match = any :表示只要有键值对匹配就能接受到消息 Queues队列用于储存消息,声明队列时如果队列不存在则会创建队列, 如果队列存在且其他属性也相同则声明无效,如果队列存在且其他属性不同将会提示错误码 406(PRECONDITION_FAILED)
参考官网:https://www.rabbitmq.com/tutorials/amqp-concepts.html#exchange-default |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年4日历 | -2025/4/21 23:56:13- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |