使用自动转发链接服务总线实体

通过服务总线自动转发功能可将队列或订阅链接到作为相同命名空间组成部分的另一个队列或主题。 启用自动转发时,服务总线会自动删除放置在第一个队列或订阅(源)中的消息,并将其放入第二个队列或主题(目标)中。 仍可将消息直接发送到目标实体。

注意

基本层的服务总线不支持自动转发功能。 有关层之间的差异,请参阅服务总线定价

创建源实体时,目标实体必须存在。 如果目标实体不存在,则当创建源实体时,服务总线将返回异常。

方案

横向扩展单个主题

可使用自动转发扩大单个主题。 服务总线将给定主题的订阅数限制为 2,000。 可以通过创建二级主题来容纳其他订阅。 即使不受服务总线的订阅数限制,添加二级主题也可提高主题的整体吞吐量。

Diagram of an autoforwarding scenario showing a message processed through an Orders Topic that can branch to any of three second-level Orders Topics.

分离消息发送方与接收方

自动转发还可用于分离消息发送方与接收方。 例如,考虑一个由以下三个模块组成的 ERP 系统:订单处理、库存管理和客户关系管理。 每个模块都会生成消息,这些消息将被排入相应的主题队。 Alice 和 Bob 是两名销售代表,他们想了解与其客户相关的所有消息。 要接收这些消息,Alice 和 Bob 各自创建一个个人队列和一个针对 ERP 主题的订阅,该订阅将所有消息自动转发给该队列。

Diagram of an autoforwarding scenario showing three processing modules sending messages through three corresponding topics to two separate queues.

如果 Alice 去度假,则填充她的个人队列,而不是 ERP 主题。 此方案中,由于销售代表未接收到任何消息,因此没有任何 ERP 主题会达到配额。

注意

设置自动转发时,源实体上 AutoDeleteOnIdle 的值会自动设置为数据类型的最大值。

  • 在源端,自动转发充当接收操作,因此启用了自动转发的源永远不会真正“空闲”,所以它不会被自动删除。
  • 自动转发不会对目标实体进行任何更改。 如果在目标实体上启用了 AutoDeleteOnIdle,则当实体在指定的空闲时间间隔内处于非活动状态时,会自动删除该实体。 建议不要在目标实体上启用 AutoDeleteOnIdle,因为如果目标实体被删除,源实体在尝试转发目标消息时会不断出现异常。

自动转发注意事项

  • 如果目标实体累积了过多消息并超出配额,或禁用了目标实体,则源实体会将消息添加到其死信队列,直到目标中存在可用空间(或重新启用了该实体)。 这些消息将继续位于死信队列中,因此,必须从死信队列显式接收和处理它们。
  • 将各个主题连接到一起以获取具有多个订阅的复合主题时,推荐第一级别主题上具有中等数量的订阅,第二级别主题上具有多个订阅。 例如,一个包含 20 个订阅的一级主题(其中每个订阅都链接到包含 200 个订阅的二级主题)就能够比包含 200 个订阅的一级主题(其中每个订阅链接到包含 20 个订阅的二级主题)具有更高的吞吐量。
  • 服务总线对于每条转发的消息收取一个操作的费用。 例如,将一条消息发送到一个包含 20 个订阅(每个订阅配置为将消息自动转发到另一队列或主题)的主题,如果所有第一级别的订阅都接收到此消息的副本,则会作为 21 次操作进行计费。
  • 若要创建链接到另一个队列或主题的订阅,则订阅创建者必须具有源和目标实体的管理权限。 将消息发送到源主题仅需要源主题的发送权限。
  • 请勿创建超过 4 个跃点的链。 超过 4 个跃点的消息将为死信。
  • 启用会话的队列或订阅不支持自动转发。
  • 源队列会尝试按接收的顺序将消息转发到目标实体,但目标可能是不支持排序的主题。 如果源实体或目标实体是分区实体,则不保证顺序。

后续步骤

若要了解如何通过不同方式(Azure 门户、PowerShell、CLI、Azure 资源管理模板等)启用或禁用自动转发,请参阅为队列和订阅启用自动转发