BizTalk Zombies - любой способ явно УДАЛИТЬ подписку из оркестровки BizTalk

Справочная информация:

Мы используем множество агрегатов, одноэлементных и многотонных оркестровок, подобных Методика Round Robin Серотера, описанная здесь (BizTalk 2009).

Все эти типы оркестровки имеют довольно произвольные точки выхода или продолжения (для агрегатов), обычно определяемые таймером - то есть, если Orch не получил больше сообщений в течение X минут, продолжите пакетирование, и если через Y минут больше истекли, и сообщений больше нет, затем выйдите. (Мы также закрываем наши одиночные / N-тонны из-за опасений по поводу снижение производительности после того, как большое количество сообщений подписано на синглтон в течение определенного периода).

Насколько мы пытались смягчить последствия против зомби, например При запуске любой обработки продолжения в оркестровке с асинхронным рефакторингом всегда есть слабое место, где «своевременное» сообщение может вызвать зомби. (т.е. получение большего количества входящих сообщений, связанных с «уже завершенными» формами оркестровки),

Если сообщение вызывает зомби на одной из подписок, сообщение, похоже, не распространяется и ДРУГИМ подписчикам (то есть орки полностью отделены от оркестровки, вызывающей зомби), то есть сообщение, вызывающее зомби, не обрабатывается.

Вопрос

Поэтому мне было бы очень интересно узнать, есть ли у кого-нибудь другой способ, программно или иным образом, явно удалить коррелированную подписку из работающей оркестровки, как только оркестровка «продвинется» дальше той точки, где она заинтересована в этом коррелированном сообщении. (это новое сообщение обычно запускает новую оркестровку со своими собственными корреляциями и т. д.)

На этом этапе мы могли бы рассмотреть даже решение для взлома, такое как отраженный вызов API BizTalk или прямое удаление SQL для MsgBoxDB.


person StuartLC    schedule 20.09.2011    source источник
comment
С тех пор, как перф. проблема была с 2006 годом, нужно ли отключать оркестровки? Я успешно использовал этот шаблон с большим количеством сообщений в bt2009. Оркестровка шла непрерывно. Чтобы безопасно выключить их, я остановил источник, а затем оркестровки.   -  person Derek Beattie    schedule 20.09.2011
comment
К сожалению, большая часть нашего входящего трафика поступает из очереди Single MQ, поэтому остановка порта приема повлияет на все наши приложения. Но вы правы - это случай «опасений» по поводу утечек, а не добросовестных доказательств (например, увидеть более 50 тыс. Сообщений, прикрепленных к синглтону, пугает). При исключительной нагрузке приостановка нескольких одноэлементных орков работает нормально, а затем возобновляется после восстановления / завершения работы сервера с более срочной работой (поскольку по «дизайну» только сообщения, не критичные к задержке, будут назначаться одиночным / циклическим переборам).   -  person StuartLC    schedule 21.09.2011
comment
Можно ли добавить еще одну очередь между существующей очередью и текущим получателем? Таким образом вы можете остановить новый приемник и корректно завершить оркестровки.   -  person Derek Beattie    schedule 21.09.2011
comment
Хорошо, примите во внимание, что если мы превратим ВСЕ оркестровки, которые имеют какую-либо корреляцию, в синглтоны / N-тонны, которые никогда не выходят (никогда), мы избежим зомби. Но в целях масштабируемости я бы не стал превращать наши орхи-агрегаторы в одиночные. Но мне просто кажется, что возможность удалить подписку в подходящее время позволит избежать подобных обходных путей.   -  person StuartLC    schedule 21.09.2011
comment
Я, наверное, не совсем понимаю вашу настройку. Даже с одной Очередью вы можете иметь несколько оркестровок, выполняющих обработку по корреляции. Я сделал это, сгруппировав входящие сообщения по некоторым критериям, в моем случае - хранилищам. Таким образом, одна оркестровка могла обрабатывать 10 магазинов, это работало хорошо.   -  person Derek Beattie    schedule 21.09.2011
comment
Fwiw нам удалось сократить количество наших зомби почти до нуля, просто путем профилирования входящих коррелированных сообщений и статистического понимания профиля частоты входящих коррелированных сообщений. «Передача» оркестровок (корреляция, продвижение свойств контекста для нисходящих подписчиков, а затем быстрый выход) также неплохо смягчают последствия. Но меня все еще беспокоит, что может произойти зомби.   -  person StuartLC    schedule 24.02.2012


Ответы (1)


Нет, вы не можете явно удалить подписку в оркестровке.

Подписка будет удалена, поскольку Orchestration разрушается, но сообщение, поступающее в этот конкретный экземпляр, будет перенаправлено в Orchestration, но Orchestration завершится без его обработки, и это ваш Зомби.

Статья Microsoft о зомби http://msdn.microsoft.com/en-us/library/bb203853.aspx

Однажды мне также нужно было иметь шаблон получения, дебатирования, агрегирования, отправки. Получение сообщений в конвертах от нескольких отправителей, их дебатирование, агрегирование по назначенному получателю (на основе двух правил, количества сообщений или временной задержки, в зависимости от того, что произойдет раньше). Этот сценарий созрел для зомби, и когда я прочитал о них, я разработал его так, чтобы этого не произошло. Это было для BizTalk 2004, я обсудил сообщения и вставил их в базу данных. У меня была хранимая процедура, которая опрашивалась портом приема, которая сработала бы, если бы был пакет для отправки, если бы он вызвал Orcherstration, который примет это сообщение и динамически его направит. Поскольку ни одна из Оркестровок не должна ждать другого сообщения, они могут закончиться изящно, и Зомби не будет.

person Dijkgraaf    schedule 21.08.2013