奇怪的Azure服务总线行为-订阅#2收到消息而订阅#1没有收到

时间:2018-11-04 10:16:16

标签: azure azureservicebus azure-servicebus-topics

我在Azure Service Bus主题订阅中遇到一些非常奇怪的问题。作为参考,我通过service bus explorer提取了服务总线主题配置,希望有人可以在这里为我指明正确的方向。非常感谢我能提供的任何帮助。

设置

我有1个名为topic2的主题,有两个对此主题topicsub2topicsub3的订阅。

问题

将消息发布到主题时。订阅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>

0 个答案:

没有答案