我在Azure Service Bus主题订阅中遇到一些非常奇怪的问题。作为参考,我通过service bus explorer
提取了服务总线主题配置,希望有人可以在这里为我指明正确的方向。非常感谢我能提供的任何帮助。
设置
我有1个名为topic2
的主题,有两个对此主题topicsub2
和topicsub3
的订阅。
问题
将消息发布到主题时。订阅topicsub3
接收所有发送的消息,而topicsub2
没有收到任何消息。此行为是随机的,有时我会在topicsub2
中看到消息,有时有时消息从未传递到topicsub2
,两个订阅都使用相同的过滤器。
以下是我试图弄清为什么会发生这种情况的几个测试方案。
我尝试从filter
中删除topicsub2
并发送消息。但这并没有影响,仍然没有消息。我的假设是,如果未应用任何过滤器,则该主题的所有消息都将转发到订阅。
在删除过滤器之后,我将默认的SQL filter (1=1)
过滤器添加回了订阅,并尝试再次发送消息,该消息不起作用。我尝试向该主题发送5条消息,但其中的一条都没有出现在订阅topicsub2
中,而所有消息都被topicsub3
接收。
我重新启动了控制台应用程序接收器(从topicsub2读取的控制台应用程序),并尝试再次发送消息。这次它起作用了。
大约10分钟后,订阅topicsub2
停止再次接收消息。
摘要
这就是我的位置。我的调查表明,这种行为是随机的,topicsub2
中有一些闲置事件我没有意识到。 Topicsub3
工作正常。
有人可以引导我朝正确的方向前进吗?
以下是主题2的设置,包括两个订阅。
<?xml version="1.0" encoding="UTF-8"?>
<Entities xmlns="http://schemas.microsoft.com/servicebusexplorer" serviceBusNamespace="defaultstd">
<Topics>
<Topic>
<DefaultMessageTimeToLive>14.00:00:00</DefaultMessageTimeToLive>
<AutoDeleteOnIdle>10675199.02:48:05.4775807</AutoDeleteOnIdle>
<MaxSizeInMegabytes>1024</MaxSizeInMegabytes>
<RequiresDuplicateDetection>False</RequiresDuplicateDetection>
<DuplicateDetectionHistoryTimeWindow>00:10:00</DuplicateDetectionHistoryTimeWindow>
<Path>topic2</Path>
<EnableBatchedOperations>True</EnableBatchedOperations>
<SupportOrdering>False</SupportOrdering>
<EnableFilteringMessagesBeforePublishing>True</EnableFilteringMessagesBeforePublishing>
<IsAnonymousAccessible>False</IsAnonymousAccessible>
<Status>Active</Status>
<UserMetadata />
<EnablePartitioning>True</EnablePartitioning>
<EnableExpress>False</EnableExpress>
<IsReadOnly>False</IsReadOnly>
<Subscriptions>
<Subscription>
<LockDuration>00:00:30</LockDuration>
<RequiresSession>False</RequiresSession>
<DefaultMessageTimeToLive>14.00:00:00</DefaultMessageTimeToLive>
<AutoDeleteOnIdle>10675199.02:48:05.4775807</AutoDeleteOnIdle>
<EnableDeadLetteringOnMessageExpiration>True</EnableDeadLetteringOnMessageExpiration>
<EnableDeadLetteringOnFilterEvaluationExceptions>True</EnableDeadLetteringOnFilterEvaluationExceptions>
<TopicPath>topic2</TopicPath>
<Name>topicsub2</Name>
<MaxDeliveryCount>2</MaxDeliveryCount>
<EnableBatchedOperations>False</EnableBatchedOperations>
<Status>Active</Status>
<ForwardTo />
<ForwardDeadLetteredMessagesTo />
<UserMetadata />
<IsReadOnly>False</IsReadOnly>
<Rules>
<Rule>
<Filter>
<SqlFilter>
<SqlExpression>sys.Label NOT IN ('TestEvent')</SqlExpression>
<CompatibilityLevel>20</CompatibilityLevel>
</SqlFilter>
</Filter>
<Action>
<EmptyRuleAction />
</Action>
<Name>$Default</Name>
<IsReadOnly>True</IsReadOnly>
</Rule>
</Rules>
</Subscription>
<Subscription>
<LockDuration>00:00:30</LockDuration>
<RequiresSession>False</RequiresSession>
<DefaultMessageTimeToLive>14.00:00:00</DefaultMessageTimeToLive>
<AutoDeleteOnIdle>10675199.02:48:05.4775807</AutoDeleteOnIdle>
<EnableDeadLetteringOnMessageExpiration>True</EnableDeadLetteringOnMessageExpiration>
<EnableDeadLetteringOnFilterEvaluationExceptions>True</EnableDeadLetteringOnFilterEvaluationExceptions>
<TopicPath>topic2</TopicPath>
<Name>topicsub3</Name>
<MaxDeliveryCount>2</MaxDeliveryCount>
<EnableBatchedOperations>False</EnableBatchedOperations>
<Status>Active</Status>
<ForwardTo />
<ForwardDeadLetteredMessagesTo />
<UserMetadata />
<IsReadOnly>False</IsReadOnly>
<Rules>
<Rule>
<Filter>
<SqlFilter>
<SqlExpression>sys.Label NOT IN ('TestEvent')</SqlExpression>
<CompatibilityLevel>20</CompatibilityLevel>
</SqlFilter>
</Filter>
<Action>
<EmptyRuleAction />
</Action>
<Name>$Default</Name>
<IsReadOnly>True</IsReadOnly>
</Rule>
</Rules>
</Subscription>
</Subscriptions>
</Topic>
</Topics>
</Entities>