Служебная шина удаляет подписки на темы без фильтров / правил, если установлен AutoDeleteOnIdle? - PullRequest
0 голосов
/ 15 января 2019

Добрый день.

Мы используем темы служебной шины в качестве движка для паба / подсистемы. Наша логика заключается в том, что наши сервисы C # подключаются к теме с подпиской. Мы удаляем $ Default (TrueFilter) и устанавливаем AutoDeleteOnIdle равным 5 минутам.

Поскольку другим частям системы нужны вещи, они говорят нашей службе C #: «Мне нужно это». Затем служба C # добавляет новые правила (обычно CorrelationFilter).

Поскольку те же самые части системы больше не нуждаются в вещах, они говорят нашей службе C #: «Мне это больше не нужно». Затем служба C # удаляет соответствующие правила.

Таким образом, подписка на тему все еще может быть подключена (в комплекте с объектом SubscriptionClient), но вообще не иметь правил.

Выпуск

Подписки «исчезают», и я не могу понять, почему. В конце концов, у меня есть активная подписка с экземпляром SubscriptionClient и подключенной функцией обратного вызова.

Затем, когда я собираюсь выполнить действие с моим объектом SubscriptionClient, он вызывает исключение MessagingEntityNotFoundException.

Мне показалось, что служебная шина произвольно и произвольно теряет или удаляет мои подписки.

Определение служебной шины "холостого хода"

Насколько я понимаю, подписка не является "бездействующей", если существует активное подключение к подписке (в моем случае, через экземпляр SubscriptionClient). Даже если не поступают сообщения с интересами, они все еще не простаивают и, следовательно, не удаляются. Если сообщение приходит днем ​​позже, экземпляр SubscriptionClient получит его.

Это мой опыт работы с другими частями системы, которые динамически не добавляют / удаляют правила. Работает довольно хорошо.

Но потом я начал задаваться вопросом:

Несмотря на наличие подключения к подписке, видит ли служебная шина мою подписку бездействующей, поскольку в ней нет правил и, следовательно, она не может принимать сообщения? И будет ли служебная шина следовать свойству AutoDeleteOnIdle и удалять его?

Если вышеприведенное верно, тогда добавит ли FalseFilter в качестве $ Default сохранение подписки?

Любое понимание и помощь будут наиболее ценными.

Большое спасибо - Шон

Обновление

Я провел элементарный тест в приложении WinForms, и, похоже, что-то не так с Service Bus. Или, по крайней мере, наш экземпляр Service Bus.

У меня 17 Тем, как указано ниже:

  • d860ffbe-e9c6-4ede-b6e9-959be4373128 / уведомит-0
  • d860ffbe-e9c6-4ede-b6e9-959be4373128 / notify-1
  • ... (вы поняли)
  • d860ffbe-e9c6-4ede-b6e9-959be4373128 / уведомит-е
  • d860ffbe-e9c6-4ede-b6e9-959be4373128 / уведомит-е
  • d860ffbe-e9c6-4ede-b6e9-959be4373128 / уведомит корень

notify-root пересылает все полученные сообщения другим темам уведомлений. Мы делаем это для шардинга.

Итак ...

Я создал 3 подписки на каждую из тем от 0 до f:

  • Без правил (я удалил $ Default)
  • TrueFilter (я оставил $ Default как есть)
  • FalseFilter (я установил фильтр по умолчанию на FalseFilter при создании подписки)

Я создал экземпляр SubscriptionClient для каждой из этих 48 подписок и сохранил экземпляры в памяти. Я также использовал метод OnMessageAsync для передачи обратного вызова, который сообщает мне, когда пишется сообщение.

Для каждой подписки AutoDeleteOnIdle установлено значение TimeSpan.FromMinutes (5).

Я перебираю свои темы, подписки и правила каждую минуту, чтобы увидеть, когда подписки и правила появляются и исчезают.

Наконец, я публиковал сообщение каждую минуту на notify-root.

Каждая из 16 подписок с TrueFilter получала сообщение каждую минуту и ​​отображала его в моем приложении WinForms, как и ожидалось.

Через 5 минут сервисная шина автоматически удалила все мои подписки на темы, заканчивающиеся на 0, 1, 2, 4, 5, 6, B, C и F.

Сервисная шина удалила эти подписки, несмотря на то, что они не заняты и активно получали сообщения менее чем за 1 минуту до удаления.

Примерно через 30 минут темы, оканчивающиеся на 3, 7, 8, 9, A и E, все еще получали сообщения без признаков удаления своих подписок.

Кроме того, служебная шина не удалила некоторые подписок, которые либо не получали сообщения из-за отсутствия правил, либо из-за наличия FalseFilter. Экземпляры SubscriptionClient did имеют обратный вызов, подключенный через OnMessageAsync. Следует отметить, что те, которые не были удалены, были в той же теме, что и подписки TrueFilter, которые также не были удалены.

Кажется, что он удаляет подписки из некоторых тем , несмотря на активность, но не других.

Я повторил тест, и это были те же самые темы, у которых были удалены их подписки (несмотря на активность).

После того как я прекратил публикацию, служебная шина удалила оставшиеся подписки через 5 минут (как и ожидалось).

Я повторю тест с другим набором из 17 тем.

1 Ответ

0 голосов
/ 17 января 2019

Как оказалось, AutoDeleteOnIdle работает точно так, как я думал.

Пока подписка на тему имеет соединение, ее не следует удалять. Неважно, есть ли у вас правила, FalseFilter или нет сообщений, которые будут опубликованы. Пока у вас есть активное соединение, и вы в настоящее время пытаетесь получать сообщения, используя OnMessage (), OnMessageAsync (), Receive () или ReceiveAsync (), тогда подписка не свободна и не будет удалена .

Однако наши подписки на темы служебной шины все еще исчезали из некоторых тем. Они все еще были удалены во время AutoDeleteOnIdle. Мне никогда не удавалось воспроизвести проблему на моем устройстве разработчика.

У нас была проблема в нашей производственной среде в последние несколько месяцев, и она только усугубилась. Мы предполагали, что делаем что-то не так.

Как это случилось, Microsoft подтвердила мне сегодня, что в их регионе Запад США 2 есть эта проблема. Другие регионы не затронуты. М.С. не подтвердил, почему это происходит, как долго это происходит или сколько времени потребуется, чтобы исправить это.

Это последнее, что я мог представить. Я предположил, что делал что-то не так.

Больше всего беспокоит то, как долго эта проблема существовала, пока Microsoft ее не обнаружила.

Надеюсь, скоро это будет исправлено.

Если кто-то еще сталкивается с исчезновением или удалением подписок служебной шины, несмотря на активность, я бы рекомендовал создать тест, как и я. Если тест не работает должным образом, обратитесь в Microsoft.

...