Шаблоны дизайна сообщений - PullRequest
9 голосов
/ 26 октября 2009

Для систем передачи сообщений, каковы ваши «шаблоны проектирования сообщений», например,

  • Ограничить количество направленных сообщений (т. Е. Конкретное место назначения)

  • Избегайте длинных каскадных цепочек (т.е. реагируйте на MsgA с помощью MsgB, MsgC и т. Д.)

  • Иметь системное сообщение "сердцебиение"

Другие примеры?

Ответы [ 5 ]

7 голосов
/ 26 октября 2009

Если вы внедряете систему, основанную на сообщениях, я предлагаю прочитать канонический ресурс, чтобы получить представление об архитектурах обмена сообщениями: Корпоративные шаблоны интеграции: проектирование, создание и развертывание решений для обмена сообщениями Грегор Хопе и Бобби Вульф.

Краткое резюме каждой модели доступно в Интернете по адресу http://www.eaipatterns.com/toc.html В конце страницы доступны два тематических исследования.

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

6 голосов
/ 26 октября 2009

Все важные в книге Шаблоны интеграции предприятия . Проверьте это.

5 голосов
/ 20 декабря 2010

Шаблон проектирования обмена сообщениями (MDP) и реализация шаблона - Опубликовано в 17-й конференции по языкам шаблонных программ (PLoP 2010).

Аннотация

Обмен информацией (т. Е. Обмен сообщениями) является неотъемлемой частью природных и техногенных процессов. Обмен сообщениями - это повсеместная часть окружающего нас мира. Традиционные программные методологии и компонентные технологии не учитывают обмен сообщениями и, следовательно, обеспечивают неполную модель. С другой стороны, парадигма обмена сообщениями и соответствующий шаблон проектирования обмена сообщениями (MDP) устраняют этот пробел и обеспечивают более полную и точную модель реального мира. Как следствие, процессы и методы разработки программного обеспечения значительно улучшаются. При разработке и производстве программного обеспечения нам необходимо думать не только о программных компонентах, но и об обмене сообщениями между этими объектами. Инкапсуляция, развязка и возможность повторного использования улучшаются при уменьшении сложности. В этой статье также обсуждается, как шаблон проектирования обмена сообщениями используется для реализации или помощи в реализации других известных шаблонов проектирования, таких как шаблоны проектирования Gang of Four (GoF), объекты доступа к данным (DAO) и шаблоны проектирования J2EE. Имейте в виду, что большинство шаблонов проектирования на некотором уровне отвечают за обмен информацией между участниками. Общий дизайн и UML-диаграммы упрощены и упрощены, что облегчает их понимание и реализацию. Результирующий дизайн и реализация программного обеспечения также более надежны и просты. Шаблоны проектирования, реализованные с использованием MDP, могут быть повторно использованы для обеспечения прозрачного и безопасного доступа к удаленным компонентам / сервисам в качестве основы для полной модели распределенных компонентов.

5 голосов
/ 26 октября 2009
  • Пользу идемпотента Обработка сообщений: допускается дублирование сообщения без «двойного дебетования».

  • Избегайте больших сообщений - предпочитайте идиому "проверки багажа"

  • Избегайте требований к порядку сообщений - значительно упрощает нагрузку на инфраструктуру

4 голосов
/ 18 октября 2018

За Корпоративные шаблоны интеграции , авторы Грегор Хопе и Бобби Вульф зафиксировали более 60 шаблонов обмена сообщениями, сгруппированных по следующим шести категориям:

  1. Построение сообщения

    • Сообщение : Для обмена информацией между двумя приложениями, соединенными каналом сообщений, упакуйте информацию в Сообщение, запись данных, которую система обмена сообщениями может передавать через канал сообщений.

    • Командное сообщение : чтобы вызвать процедуру из другого приложения с использованием обмена сообщениями, используйте командное сообщение для надежного вызова процедуры.

    • Сообщение документа : Для передачи данных между приложениями с использованием обмена сообщениями используйте Сообщение документа для надежной передачи структуры данных.

    • Сообщение о событии : Для передачи событий из одного приложения в другое с помощью обмена сообщениями используйте Сообщение о событии для надежного, асинхронного уведомления о событиях между приложениями.

    • Запрос-ответ : Чтобы получить ответ от получателя, когда приложение отправляет сообщение, отправьте пару сообщений-запросов, каждое на свой канал.

    • Адрес возврата : Чтобы сообщить ответчику, куда отправить ответное сообщение, сообщение запроса должно содержать адрес возврата.

    • Идентификатор корреляции : чтобы позволить запрашивающей стороне сопоставлять запросы с ответами, каждое ответное сообщение должно содержать Идентификатор корреляции, уникальный идентификатор, указывающий, для какого запроса предназначен ответ на сообщение.

    • Последовательность сообщений : Для передачи произвольно большого объема данных посредством обмена сообщениями разбейте данные на куски и отправьте их как Последовательность сообщений, пометив каждое сообщение полями идентификации последовательности.

    • Срок действия сообщения : Чтобы указать, когда сообщение следует считать устаревшим и, следовательно, его не следует обрабатывать, задайте срок действия сообщения, чтобы указать ограничение по времени, в течение которого сообщение является жизнеспособным.

    • Индикатор формата : Чтобы спроектировать формат данных сообщения для возможных изменений в будущем, включите индикатор формата, чтобы в сообщении указывалось, какой формат он использует.

  2. Маршрутизация сообщений

    • Pipes-and-Filters : Чтобы выполнить сложную обработку сообщения при сохранении независимости и гибкости, используйте архитектурный стиль Pipes and Filters, чтобы разделить большую задачу обработки на последовательность меньших, независимые этапы обработки (фильтры), которые связаны каналами (трубами).

    • Маршрутизатор сообщений : Чтобы отделить отдельные этапы обработки, чтобы сообщения могли передаваться различным фильтрам в зависимости от набора условий, вставьте специальный фильтр, Маршрутизатор сообщений, который принимает сообщение из один канал сообщений и повторно публикует его на другой канал канала сообщений в зависимости от набора условий.

    • Маршрутизатор на основе содержимого : Чтобы справиться с ситуацией, когда реализация одной логической функции (например, проверка инвентаря) распространяется на несколько физических систем, используйте Маршрутизатор на основе контента для маршрутизации каждое сообщение правильному получателю на основании содержимого сообщения.

    • Фильтр сообщений : Чтобы избежать получения компонентом неинтересных сообщений, используйте специальный тип маршрутизатора сообщений, фильтр сообщений, чтобы исключить нежелательные сообщения из канала на основе набора критериев.

    • Динамический маршрутизатор : Чтобы избежать зависимости маршрутизатора от всех возможных назначений при сохранении его эффективности, используйте динамический маршрутизатор, который может самостоятельно настраиваться на основе специальных сообщений конфигурации от участвующих направления.

    • Список получателей : Чтобы направить сообщение в список динамически определенных получателей, задайте канал для каждого получателя. Затем используйте Список получателей для проверки входящего сообщения, определения списка желаемых получателей и пересылки сообщения всем каналам, связанным с получателями в списке.

    • Splitter : Чтобы обработать сообщение, если оно содержит несколько элементов, каждый из которых, возможно, придется обрабатывать по-своему, используйте Splitter, чтобы разбить составное сообщение на серию отдельные сообщения, каждое из которых содержит данные, относящиеся к одному элементу.

    • Агрегатор : Чтобы объединить результаты отдельных, но связанных сообщений, чтобы их можно было обрабатывать как единое целое, используйте фильтр с отслеживанием состояния, Агрегатор, для сбора и хранения отдельных сообщений до полного завершения. набор связанных сообщений был получен. Затем агрегатор публикует одно сообщение, извлеченное из отдельных сообщений.

    • Resequencer : Чтобы вернуть поток связанных, но непоследовательных сообщений обратно в правильный порядок, используйте фильтр с сохранением состояния, Resequencer, для сбора и изменения порядка сообщений таким образом, чтобы они могут быть опубликованы на выходном канале в указанном порядке.

    • Обработчик составленных сообщений : Чтобы поддерживать общий поток сообщений при обработке сообщения, состоящего из нескольких элементов, каждый из которых может требовать различной обработки, используйте Обработчик составных сообщений для обработки составного сообщения. Обработчик составленных сообщений разделяет сообщение, направляет вложенные сообщения в соответствующие пункты назначения и повторно объединяет ответы обратно в одно сообщение.

    • Scatter-Gather : Чтобы поддерживать общий поток сообщений, когда сообщение необходимо отправить нескольким получателям, каждый из которых может отправить ответ, используйте Scatter-Gather, который транслирует сообщение нескольким получателям и повторно объединяет ответы обратно в одно сообщение.

    • Routing Slip : Для последовательной маршрутизации сообщения через серию этапов обработки, когда последовательность этапов неизвестна во время разработки и может варьироваться для каждого сообщения, прикрепите Riping Slip к каждое сообщение, определяющее последовательность этапов обработки. Оберните каждый компонент специальным маршрутизатором сообщений, который читает сообщение о маршрутизации и направляет сообщение следующему компоненту в списке.

    • Process Manager : для маршрутизации сообщения через несколько этапов обработки, когда требуемые этапы могут быть неизвестны во время разработки и могут быть непоследовательными, используйте центральный процессор, диспетчер процессов , для поддержания состояния последовательности и определения следующего шага обработки на основе промежуточных результатов.

    • Message Broker : Чтобы отделить пункт назначения сообщения от отправителя и сохранить центральный контроль над потоком сообщений, используйте центральный брокер сообщений, который может получать сообщения от нескольких адресатов, определите правильный пункт назначения и направьте сообщение на правильный канал.

  3. Преобразование сообщений (перевод)

    • Переводчик сообщений : чтобы позволить системам, использующим разные форматы данных, обмениваться данными друг с другом с помощью обмена сообщениями, используйте специальный фильтр, переводчик сообщений, между другими фильтрами или приложениями для перевода одного формата данных в другой.

    • Envelope Wrapper : чтобы позволить существующим системам участвовать в обмене сообщениями, который предъявляет особые требования к формату сообщения, такие как поля заголовка сообщения или шифрование, используйте Envelope Wrapper для переноса данных приложения. в конверте, который соответствует инфраструктуре обмена сообщениями. Разверните сообщение, когда оно прибудет в пункт назначения.

    • Content Enricher : для связи с другой системой, если у источника сообщения нет всех необходимых элементов данных, используйте специальный преобразователь Content Enricher для доступа к внешнему источнику данных в Чтобы дополнить сообщение отсутствующей информацией.

    • Фильтр содержимого : Чтобы упростить работу с большим сообщением, когда кто-то интересуется только несколькими элементами данных, используйте фильтр содержимого для удаления неважных элементов данных из сообщения, оставляя только важные элементы. .

    • Проверка заявки : Чтобы уменьшить объем данных сообщения, отправляемого по системе, без ущерба для информационного содержимого, сохраните данные сообщения в постоянном хранилище и передайте проверку заявки последующим компонентам. Эти компоненты могут использовать проверку претензий для извлечения сохраненной информации.

    • Нормализатор : Для обработки сообщений, которые семантически эквивалентны, но поступают в другом формате, используйте Нормализатор для маршрутизации каждого типа сообщений через специальный переводчик сообщений, чтобы получающиеся сообщения соответствовали общему формат.

    • Модель данных Canonical : Чтобы минимизировать зависимости при интеграции приложений, использующих разные форматы данных, разработайте модель данных Canonical, которая не зависит от какого-либо конкретного приложения. Требовать от каждого приложения составлять и потреблять сообщения в этом общем формате.

  4. Конечная точка обмена сообщениями

    • Конечная точка сообщения : Чтобы подключить приложение к каналу обмена сообщениями для отправки и получения сообщений, используйте конечную точку сообщения, клиент системы обмена сообщениями, которую приложение затем может использовать для отправки или получения сообщения.

    • Шлюз обмена сообщениями : Чтобы инкапсулировать доступ к системе обмена сообщениями из остальной части приложения, используйте Messaging Gateway, класс, который оборачивает вызовы методов, специфичных для обмена сообщениями, и предоставляет методы, специфичные для домена приложение.

    • Служба обмена сообщениями . Чтобы перемещать данные между объектами домена и инфраструктурой обмена сообщениями, сохраняя независимость друг от друга, создайте отдельное средство обмена сообщениями, содержащее логику сопоставления между инфраструктурой обмена сообщениями и доменные объекты. Ни объекты, ни инфраструктура не знают о существовании Messaging Mapper.

    • Транзакционный клиент : чтобы позволить клиенту управлять своими транзакциями с помощью системы обмена сообщениями, используйте Транзакционный клиент - сделайте сеанс клиента с системой обмена сообщениями транзакционным, чтобы клиент мог указать границы транзакций .

    • Потребитель опроса : чтобы приложение могло потреблять сообщение, когда приложение готово, приложение должно использовать Потребителя опроса, который явно делает вызов, когда хочет получить сообщение. .

    • Потребитель драйвера событий : чтобы приложение могло автоматически использовать сообщения по мере их поступления, приложение должно использовать получателя событий, который автоматически передает сообщения по мере их доставки на канале.

    • Конкурирующие потребители : чтобы позволить клиенту обмена сообщениями обрабатывать несколько сообщений одновременно, создайте несколько конкурирующих потребителей на одном канале, чтобы потребители могли обрабатывать несколько сообщений одновременно.

    • Диспетчер сообщений : Чтобы координировать обработку сообщений по нескольким потребителям в одном канале, создайте диспетчер сообщений в канале, который будет принимать сообщения из канала и распространять их среди исполнителей.

    • Селективный потребитель : чтобы разрешить потребителю сообщения выбирать, какие сообщения он хочет получить, сделайте его потребительским избирателем, который фильтрует сообщения, доставляемые по его каналу, так что он получает только те, которые соответствуют его критериям.

    • Durable Subscriber : Чтобы не пропустить подписку пропущенных сообщений, пока она их не прослушивает, используйте Durable Subscriber, чтобы система обмена сообщениями сохраняла сообщения, опубликованные, пока подписчик отключен.

    • Идемпотентный приемник : Чтобы разрешить получателю сообщения обрабатывать дубликаты сообщений, сконструируйте получатель как идемпотентный приемник, то есть тот, который может безопасно принимать одно и то же сообщение несколько раз.

    • Активатор службы : Чтобы создать службу приложения, которая будет вызываться как с помощью различных технологий обмена сообщениями, так и с помощью методов без обмена сообщениями, разработайте активатор службы, который соединяет сообщения на канале с обслуживаемой службой. доступ.

  5. Каналы обмена сообщениями

    • Канал сообщений : чтобы разрешить одному приложению взаимодействовать с другим с помощью обмена сообщениями, подключите приложения с помощью канала сообщений, где одно приложение записывает информацию в канал, а другое считывает эту информацию из канал.

    • Двухточечный канал : Чтобы гарантировать, что вызывающий абонент получит документ или выполнит вызов только один получатель, отправьте сообщение по двухточечному каналу, что обеспечивает что только один получатель получит конкретное сообщение.

    • Канал публикации-подписки : чтобы отправитель мог передать событие всем заинтересованным получателям, отправьте событие по каналу публикации-подписки, который доставляет копию определенного события каждому получателю. .

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

    • Неверный канал сообщений : чтобы позволить получателю сообщений изящно обрабатывать получение сообщения, которое не имеет смысла, получатель должен переместить неправильное сообщение в Неверный канал сообщений, специальный канал для сообщений которые не могут быть обработаны их получателями.

    • Канал мертвых писем : Когда система обмена сообщениями определяет, что она не может или не должна доставлять сообщение, она может решить переместить сообщение в Канал мертвых писем.

    • Гарантированная доставка : Чтобы гарантировать отправителю, что сообщение будет доставлено, даже если система обмена сообщениями выйдет из строя, используйте Гарантированную доставку, чтобы сделать сообщения постоянными, чтобы они не терялись, даже если обмен сообщениями сбой системы.

    • Адаптер канала : Чтобы подключить приложение к системе обмена сообщениями, чтобы оно могло отправлять и получать сообщения, используйте адаптер канала, который может обращаться к API или данным приложения и публиковать сообщения на канале. на основе этих данных, которые также могут получать сообщения и вызывать функции внутри приложения.

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

    • Шина сообщений : Шина сообщений, которая соединяет архитектуру, которая позволяет отдельным приложениям работать вместе, но таким образом, чтобы приложения можно было легко добавлять или удалять, не затрагивая другие, промежуточное ПО между этими приложениями и позволяет им работать вместе с помощью обмена сообщениями.

  6. Управление системами (мониторинг)

    • Управляющая шина : Для эффективного администрирования системы обмена сообщениями, которая распределена по нескольким платформам и обширной географической области, используйте управляющую шину для управления системой интеграции предприятия. Шина управления использует тот же механизм обмена сообщениями, который используется данными приложения, но использует отдельные каналы для передачи данных, которые имеют отношение к управлению компонентами, участвующими в потоке сообщений.

    • Обход : Чтобы направить сообщение через промежуточные шаги для выполнения функций проверки, тестирования или отладки, создайте Обход с помощью контекстного маршрутизатора, управляемого через шину управления. В одном состоянии маршрутизатор направляет входящие сообщения с помощью дополнительных шагов, в то время как в другом он направляет сообщения непосредственно в канал назначения.

    • Wire Tap : для проверки сообщений, которые передаются по двухточечному каналу, вставьте простой список получателей в канал, который публикует каждое входящее сообщение в основной канал и дополнительный канал. .

    • История сообщений : Чтобы эффективно анализировать и отлаживать поток сообщений в слабосвязанной системе, присоедините к сообщению историю сообщений. История сообщений - это список всех приложений, через которые прошло сообщение с момента его создания.

    • Хранилище сообщений : Чтобы сообщать информацию о сообщениях, не нарушая слабосвязанную и временную природу системы обмена сообщениями, используйте Хранилище сообщений для сбора информации о каждом сообщении в центральном местоположении.

    • Smart Proxy : для отслеживания сообщений в службе, которая публикует ответные сообщения на адрес возврата, указанный запрашивающей стороной, используйте Smart Proxy для хранения адреса возврата, предоставленного исходным запрашивающей стороной, и замените его. это с адресом Smart Proxy. Когда служба отправляет ответное сообщение, направьте его на исходный адрес возврата.

    • Тестовое сообщение : Чтобы предотвратить искажение исходящих сообщений компонентом из-за внутренней ошибки, используйте Тестовое сообщение для проверки работоспособности компонентов обработки сообщений.

    • Channel Purger : чтобы удалить «оставшиеся» сообщения в канале, чтобы они не мешали тестам или работающим системам, используйте Channel Purger для удаления нежелательных сообщений из канала.

...