下午好。
我们正在使用服务总线主题作为发布/订阅系统的引擎。我们的逻辑涉及C#服务与订阅相关的主题。我们删除$ Default(TrueFilter)并将AutoDeleteOnIdle设置为5分钟。
当系统的其他部分需要东西时,他们告诉我们的C#服务,“我需要这个”。然后,C#服务会添加新规则(通常为CorrelationFilter)。
由于系统的那些相同部分不再需要东西,他们告诉我们的C#服务,“我不再需要它了。”然后,C#服务将删除相应的规则。
这样,主题订阅仍然可以连接(用SubscriptionClient对象完成),但是根本没有规则。
问题
订阅“消失了”,我无法确定为什么。毕竟,我拥有一个带有SubscriptionClient实例的有效订阅,并且已连接了一个回调函数。
然后,当我对SubscriptionClient对象执行操作时,它将引发MessagingEntityNotFoundException。
在我看来,Service Bus似乎是随机任意丢失或删除我的订阅。
服务总线的“空闲”定义
我的理解是,只要存在到订阅的活动连接(在我的情况下是通过SubscriptionClient实例),订阅就不会“空闲”。即使没有感兴趣的消息通过,它仍然不是空闲的,因此仍然没有被删除。如果一天后收到消息,则SubscriptionClient实例将收到该消息。
这是我对系统其他不动态添加/删除规则的部分的经验。效果很好。
但是后来我开始怀疑:
尽管与订阅有连接,但Service Bus是否将我的订阅视为空闲,因为它没有规则,因此可能无法接收消息?然后Service Bus会跟随AutoDeleteOnIdle属性并将其删除吗?
如果以上情况正确,那么是否将FalseFilter作为$ Default保留订阅?
我们将不胜感激和帮助。
非常感谢 -肖恩
更新
我在WinForms应用程序中进行了基本测试,而Service Bus似乎从根本上错了。或者至少是我们的服务总线实例。
我有17个主题,如下:
notify-root将收到的所有消息转发到其他通知主题。我们这样做是为了分片。
所以...
我在0到f个主题中的每个主题上创建了3个订阅:
我为这48个订阅中的每个订阅创建了一个SubscriptionClient实例,并将这些实例保留在内存中。我还使用OnMessageAsync方法传递了一个回调,该回调告诉我何时写入消息。
每个订阅的AutoDeleteOnIdle设置为TimeSpan.FromMinutes(5)。
我每1分钟浏览一次主题,订阅和规则,以查看订阅和规则何时出现和消失。
最后,我每1分钟在notify-root上发布一条消息。
使用TrueFilter的16个订阅中的每个订阅都每分钟收到一条消息,并按预期方式显示在我的WinForms应用程序中。
在5分钟时,Service Bus自动删除我所有以0、1、2、4、5、6,B,C和F结尾的主题的订阅。
Service Bus删除了这些订阅,尽管它们不是空闲的,并且在删除前不到1分钟的时间内主动接收到消息。
大约30分钟后,以3、7、8、9,A和E结尾的主题仍然收到消息,没有删除订阅的迹象。
此外,Service Bus不会删除由于没有规则或具有FalseFilter而没有收到消息的订阅的一些。 SubscriptionClient实例 did 具有通过OnMessageAsync连接的回调。值得注意的是,未删除的订阅与未删除的TrueFilter订阅处于同一主题。
尽管有其他活动,但似乎正在从一些主题中删除订阅。
我重复了测试,正是由于相同的主题,他们的订阅被删除了(尽管有活动)。
一旦我停止发布,Service Bus将在5分钟后删除剩余的订阅(如预期的那样)。
我将用不同的17个主题重复测试。
答案 0 :(得分:0)
事实证明,AutoDeleteOnIdle的工作方式与我认为的方式完全相同。
只要主题订阅具有连接,就不应将其删除。您没有规则,FalseFilter或没有消息发布都没有关系。只要您具有活动的连接,并且当前正在尝试使用OnMessage(),OnMessageAsync(),Receive()或ReceiveAsync()来获取消息,则订阅 不会闲置并且不会被删除< / em> 。
但是,我们的服务总线主题订阅仍从主题的 some 中消失。它们仍在AutoDeleteOnIdle时间被删除。我从没能在开发箱中重现该问题。
在过去的几个月中,我们在生产环境中遇到了这个问题,但情况只会变得更糟。我们以为我们做错了什么。
碰巧的是,微软今天向我证实了他们在美国西部2区的问题。没有其他地区受到影响。 MS尚未确认发生的原因,发生的时间或纠正时间。
这是我梦imagine以求的最后一件事。我以为我做错了什么。
最令人困扰的是,这个问题存在了多长时间而未被Microsoft发现。
希望它将很快得到修复。
如果有人遇到Service Bus订阅但尽管活动消失或被删除的情况,我建议像我一样进行测试。如果测试结果与预期不符,请与Microsoft联系。