У меня очень странные проблемы с подписками на темы служебной шины Azure. Для справки я извлек конфигурации темы служебной шины через service bus explorer
и надеясь, что кто-нибудь может указать мне правильное направление здесь. Очень ценю любую помощь, которую я могу получить.
Настройка
У меня есть 1 тема с именем topic2
и две подписки на эту тему topicsub2
и topicsub3
.
Вопросы
При публикации сообщения в теме. Подписка topicsub3
получает все сообщения, отправленные, а topicsub2
не получает никаких сообщений. Такое поведение является случайным, иногда я вижу сообщения в topicsub2
, а иногда сообщение никогда не доставляется в topicsub2
, обе подписки используют одни и те же фильтры.
Ниже приведены несколько тестовых сценариев, которые я попытался выяснить, почему это происходит.
Я попытался удалить filter
из topicsub2
и отправить сообщение. Но это никак не отразилось на сообщениях. Я предполагаю, что если фильтры не применяются, все сообщения по теме будут перенаправлены в подписку.
После удаления фильтра я добавил фильтр SQL filter (1=1)
по умолчанию обратно в подписку и попытался отправить сообщение снова, оно не сработало. Я попытался отправить 5 сообщений в тему, ни одно из них не появилось в подписке topicsub2
, и все были получены topicsub3
.
Я перезапустил приемник консольного приложения (консольное приложение, которое читает из themesub2) и попытался отправить сообщения снова. На этот раз это сработало.
Примерно через 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>