Как оказалось, AutoDeleteOnIdle работает точно так, как я думал.
Пока подписка на тему имеет соединение, ее не следует удалять. Неважно, есть ли у вас правила, FalseFilter или нет публикуемых сообщений. Пока у вас есть активное соединение, и вы в настоящее время пытаетесь получать сообщения, используя OnMessage (), OnMessageAsync (), Receive () или ReceiveAsync (), тогда подписка не будет свободна и не будет удалена [ 111] .
Однако наши подписки на темы служебной шины все еще исчезали из некоторых тем. Они все еще были удалены во время AutoDeleteOnIdle. Мне никогда не удавалось воспроизвести проблему на моей коробке разработчика.
У нас была проблема в нашей производственной среде в последние несколько месяцев, и она только усугубилась. Мы предполагали, что делаем что-то не так.
Как это случилось, Microsoft подтвердила мне сегодня, что их западная область США 2 имеет эту проблему. Другие регионы не затронуты. MS не подтвердил, почему это происходит, как долго это происходит или сколько времени потребуется, чтобы исправить это.
Это последнее, что я мог себе представить. Я предположил, что делал что-то не так.
Больше всего беспокоит то, как долго эта проблема существовала, пока Microsoft ее не обнаружила.
Надеюсь, скоро это будет исправлено.
Если кто-то еще сталкивается с исчезновением или удалением подписок служебной шины, несмотря на активность, я бы рекомендовал создать тест, как и я. Если тест не работает должным образом, обратитесь в Microsoft.
Вы могли попытаться использовать Терракоту для кластеризации программы. Это невероятно неумолимо вокруг неправильной синхронизации (который станет очевидным даже только с одним узлом в кластере). Это - большой вопрос: я часто хотел точно эту способность - я удивлен, что в стандартном JRE нет переключателя -XXJMMExtreme
Терракота является открытым исходным кодом и свободный для основного продукта.
Это могло бы помочь: http://javapathfinder.sourceforge.net/
Я не знаю ни о каком VM, который гарантирует худшее поведение случая все время, которое, кажется, то, что Вы просите. Ситуация, что Вы описываете, может произойти с Sun VMs (а также многие другие), но только из-за кэширования проблем. Я не знаком с VM, который намеренно делает это все время.
Существует много путей, которые могли инициировать ошибку параллелизма.
Для худшего случая JVM попробуйте мобильный телефон. (Ваше приложение, вероятно, не будет работать вообще), ;)