AMQP-核心概念-2

本文参考以下链接摘录翻译:

https://www.rabbitmq.com/tutorials/amqp-concepts

默认交换机

默认的交换机是一个direct exchange, 其名字为空字符串。它有一个对简单应用非常有用的属性:每一个创建的队列会自动绑定到它上面,且routing key和队列的名字一样。

例如,当你声明了一个叫"search-indexing-online"的队列,AMQP 0-9-1消息代理会用"searching-indexing-online" routing key将该队列绑定到默认交换机。因此,带着routing key "searching-indexing-online"的消息发布到默认交换机后,将会被路由到"searching-indexing-online"队列。换句话说,默认交换机让你觉得好像把消息直接发送到了队列,即使如此,这个表象并不是底层发生的真实情况。

在RabbitMQ里,默认交换机不允许绑定/解绑。对默认交换机执行绑定操作会报错。

Direct 交换机

一个Direct交换机基于消息的路由键将消息发送到队列。Direct交换机是单播路由的理想选择。Direct交换机也可用于多播路由。

  • 以下是Direct交换机的工作机制:
  • 一个队列A 用 路由键K 将自己 绑定 到 交换机
  • 当一条带着路由键R 的消息到达交换机,如果K = R,交换机把这条消息路由到队列A
  • 如果有多个队列使用同样的路由键K与交换机绑定,当路由键R=K的消息到达时, 交换机会把该消息路由到所有这些队列

direct交换机 路由 示意图:

Fanout交换机

一个Fanout交换机将消息路由到所有绑定到它的交换机,路由键会被它忽略。如果有N个队列绑定到一个Fanout交换机,当有一条新消息发布到交换机时,该消息的副本会被发送给这N个队列。Fanout交换机非常适合广播消息。

由于Fanout交换机发送消息给每一个绑定在它上面的队列,它的使用用例都非常相似:

大量的多玩家在线游戏可以用它来实现计分板更新或者其他全局事件

体育新闻网可以用fanout交换机来以接近实时的速度分发分数更新到移动客户端

分布式系统可以广播各种状态和配置更新

群聊可以用fanout交换机在参与者之间分发消息(AMQP没有内置该概念,XMPP是更好的选择)

fanout 交换机 路由 示意图如下:

Topic 交换机

Topic交换机把消息路由到一个或多个队列,根据消息路由键与队列绑定模式之间的匹配关系。topic交换机通常用来实现各种 发布/订阅 模式的变体。Topic交换机通常用于多播路由。

Topic交换机有非常广泛的使用用例。当一个问题涉及多个 消费者/应用, 他们需要根据类别选择性地接收消息时,这是应考虑使用topic交换机。

  • 用例举例:
  • 分发相关数据到指定的地理位置,比如,销售点
  • 被多个工人完成的后台任务流程,每个流程都能够处理指定类型的任务
  • 股票价格更新(以及基于其他类型财经数据的更新)
  • 涉及分类和标记的新闻更新(比如,只更新一个特定的运动或小组)
  • 云中各种类型服务之间的协调与调度
  • 分布式架构 或 特定操作系统的软件构建 或 每一个创建者只能处理一种架构或操作系统的打包

Headers交换机

Headers交换机是为基于多属性的路由而设计,即用多个消息头比用一个路由键更易表达清楚时使用。Headers交换机忽略路由键属性。取而代之,会从headers属性里获取用于路由的属性。如果某条消息的消息头的值与指定的用于绑定的值相等,那么这条消息就是匹配的。

绑定一个队列到Headers交换机,可以用多个头属性。在这种情形下,交换机需要应用开发者提供一条额外信息,即,只需要任意一个header匹配,还是所有header都需要匹配?这就是 x-match 绑定参数的用途。当x-match设置为any时,只要有一个header值匹配就足够了。另外,x-match设置为all时,强制所有header值必须匹配。

当使用 any 和 all 时, 以 x- 开始的头将不会用于判断匹配。将 x-match 设置为 any-with-x 或 all-with-x 后,以 x- 开始的头 就可以用于判断匹配。

Headers交换机可以被看做“加强版direct交换机”。因为它基于headers进行路由,它可以当作direct交换机来使用,路由键不用一定是一个字符串,也可以是一个整数,或者一个hash值等。

今天就暂时翻到这里了,

待续。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值