使用 Windows Azure 服务总线进行消息路由

Posted

技术标签:

【中文标题】使用 Windows Azure 服务总线进行消息路由【英文标题】:Message routing with Windows Azure Service Bus 【发布时间】:2012-11-25 01:24:26 【问题描述】:

我花了几个小时才了解 Azure 服务总线架构。我特别想知道这种排队技术是否可以用来支持消息路由——类似于 RabbitMQ 的路由能力。 http://www.rabbitmq.com/tutorials/tutorial-four-python.html

我们将改为使用直接交换。背后的路由算法 直接交换很简单——消息进入绑定的队列 key 与消息的路由键完全匹配。

在这个设置中,我们可以看到绑定了两个队列的直接交换 X 给它。第一个队列与绑定键橙色绑定,并且 第二个有两个绑定,一个带黑色绑定键,另一个 带绿色。

在这样的设置中,使用路由键发布到交换的消息 橙色将被路由到队列 Q1。具有路由键的消息 黑色或绿色将进入 Q2。所有其他消息将被丢弃。

寻找对服务总线架构有深入了解的人来推荐实现此类队列的最佳向量。

【问题讨论】:

【参考方案1】:

Windows Azure 服务总线主题和订阅允许您做同样的事情:

让我们将图像与您的示例进行比较:

直接交换 X 将是图像中的 DataCollection Topic。 Q1 将是 Dashboard SubscriptionFilter 设置为 Redmond) Q2 将是 Inventory Subscription(没有 Filter,意味着它将接收所有消息)。

其实很简单。您的客户端向主题发送消息(类似于队列)并且可以向该消息添加一些元数据(这可以用作binding key)。现在您不再从 Topic 本身读取消息,Topic 会将消息转发给所有订阅。要实现消息路由,您只需使用类似于 SQL 的语法对一个或多个订阅设置一个过滤器。

Python教程:How to Use Service Bus Topics/Subscriptions

【讨论】:

完全。这是一个很好的答案和很好的功能。 主题是否向所有订阅发送消息副本?如果消息被一个订阅消费,其他订阅是否可以使用? jayasurya_j:消息将被传递到所有适用的订阅。如果消息在一个订阅中被消费,它将保留在其他订阅中,直到它也在该订阅中被消费。

以上是关于使用 Windows Azure 服务总线进行消息路由的主要内容,如果未能解决你的问题,请参考以下文章

Azure 服务总线 http 与 websocket

顺序处理算法/模式 - Azure 服务总线队列

如何配置 Azure 服务总线队列以将消息推送到客户端而不进行轮询?

使用 Windows Azure 服务总线扩展 SignalR

限制服务总线消息接收的 Azure Functions 速率

互操作性 Azure 服务总线消息队列消息