【发布时间】:2020-11-11 04:50:23
【问题描述】:
我有一个横向扩展的应用程序,其中每个实例都连接到同名的 Azure 服务总线订阅。最终结果是只有一个实例可以对任何给定消息采取行动,因为它们都在监听同一个订阅。
有时,应用程序需要将实例置于空闲状态(服务结构 ActiveSecondary 副本)。发生这种情况时,我需要关闭订阅,以便该实例不再接收消息。如果最初有 2 个实例,一旦一个进入空闲状态,所有消息都应该发送到剩余的实例。这很重要,以便所有消息都由正确配置的主实例处理。
当实例空闲时,取消令牌被取消。我有代码监听取消并在最初创建订阅时生成的 SubscriptionClient 上调用 Close()。
问题是,即使我在一个实例上调用 Close(),消息仍然在它和主实例之间随机拆分。
我这样做的方式本身就是错误的,还是我的代码中的其他东西导致了这种行为?
【问题讨论】:
-
你在处理
OnChangeRoleAsync的变化吗? -
我在 canceltoken.Register 委托处理程序中处理它。根据服务结构生命周期文档,我假设任何活动的辅助节点要么被降级(因此令牌被取消),要么一开始就没有调用 runasync。这不正确吗?
-
您能发布订阅/取消订阅代码吗?
标签: c# azure-service-fabric azureservicebus