AMQP协议的路由机制

xiaozhu12371237 2016-10-05 10:10:57

路由机制

首先,值得一提的一点是路由器支持两种不同的路由机制。

消息路由

当路由器从链路上收到一条消息,它使用发送端发到路由器时所指定的目的地址;如果这一地址没有被指定,则目的地址从消息的“to”属性中获取。基于这个信息,路由器查找路由表从而决定消息传递的路径。它可能是直接相连的接收端,也可能是网络中的另一个路由器来作为下一块跳板。当然,消息也可以被送达地址相同的多个不同的接收端。这里的关键点是针对每一条接受到的消息都做一次路由决策,而且路由器内部节点之间和外部客户端往往还有很多通信。



从上图中可以看出,链路是建立在发送端和路由器以及接收端和路由器之间的。在基于消息的路由机制下,路由器和发送端以及接收端的消息交换是两条截然不同的链路。

这也意味着路由器(内部的接收端)与发送端、路由器(内部的发送端)与接收端有着不同的流量控制策略。当然,如果接收端获得的分值很低(比如10),但是路由器(内部接收端)给了发送端很大的分值(默认是250),这个差值需要被考虑到。如果接收端由于某些原因(收到10条消息后)关闭了连接,而发送端发送的消息已经超过10条(根据“accepted”标志),因为路由器无法向已经关闭的接收端继续发送消息,它会回复一个“released”标志。

另一个有趣的地方在于消息的“处置”。路由器总是在网络中传播递送和处置。当接收一条“预处置”消息时,它的属性被传播到了目的地址。“未处置”消息也是如此:在这种情况下,路由器需要跟踪传入的递送,并将未处置消息发往目的地址;当它从最终的接收端收到已处置标志时,它将以同样的方式回复原始发送端。

消息路由的最后一点有趣之处在于其路由模式,定义了消息在网络中的游走路径:

最近路线:即使有许多接收端的地址相同,消息还是按照最短路径送往目的地址。这也意味着只有一个接收端能够收到消息。

平衡路线:当有多个接收端的地址相同时,发往该地址的消息将分布在各个接收端上。意思是说各个接收端以类似“竞争消费者”的形式每次接收不同的消息。

多路传送:这有点类似“发布/订阅”模式,即附着在同一个地址的所有接收端都能收到同样的消息。

当某个地址上的所有接收者都与同一个路由器相连,我们可以近似认为“最近路线”和“平衡路线”的效果是一样的,因为所有的路径长度都相等,接收端与路由器的距离等级都相同。事实上并不完全这样,因为在“最近路线”模式下路由器对各个接收端使用严格的循环分布,而在“平衡路线”模式下它考虑了各个接收端未处置递送的个数,选择其中“更快”的一个(即处置消息更快)。

举个例子,假设有一个发送端S、两个接收端R1和R2和一个路由器网络,R1与S连接在同一个路由器上,R2连在了另一个路由器(连到前一个)。我们认为R1到S的距离是1级,R2到S的距离是2级。

在下面的场景中,按照“最近路线”模式S发送的所有消息都将被传递到R1。



按照“平衡路线”模式,消息分布在两个接收端上,且与路径长度无关。



最后,在“多路传送”模式下所有的消息被发送到所有的接收端。

...全文
532 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

953

社区成员

发帖
与我相关
我的任务
社区描述
为开发者提供高通丰富的解决方案及全面技术下载内容。本版以AI人工智能、WoS移动笔记本、XR、IoT 物联网、Auto 汽车、生成式AI等核心板块组成,为开发者提供一个便捷及高效的学习交流平台。
人工智能物联网机器学习 企业社区 北京·东城区
社区管理员
  • Qualcomm开发
  • csdnsqst0050
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧