Поделиться через


Сценарии маршрутизации

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

Распространенные сценарии

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

Сценарий Используется, если
Управление версиями служб Необходимо поддерживать несколько версий службы, или потребуется развертывание обновленной службы в будущем
Секционирование данных службы Необходимо секционировать службу в нескольких узлах
Динамическое обновление Для обработки изменений развертываний служб необходимо динамически перенастроить логику маршрутизации во время выполнения.
Многоадресная рассылка Необходимо отправить одно сообщение в несколько конечных точек
Связывание протоколов Получение сообщений выполняется через один транспортный протокол, а целевая конечная точка использует другой протокол
Обработка ошибок Необходимо обеспечить устойчивость к сетевым сбоям и ошибкам связи

Примечание.

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

Управление версиями службы

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

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

Инструкции по созданию конфигурации управления версиями служб см. в разделе "Практическое руководство. Управление версиями служб".

Секционирование данных служб

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

Инструкции по созданию конфигурации секционирования данных службы см. в разделе "Практическое руководство. Секционирование данных службы".

Динамическая маршрутизация

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

Инструкции, используемые для реализации динамической маршрутизации, см. в разделе "Практическое руководство. Динамическое обновление".

Многоадресная рассылка

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

  • Форма канала не должна иметь тип «запрос-ответ» (хотя он может быть односторонним или дуплексным), так как данный тип требует, чтобы на запрос от клиентского приложения выдавался только один ответ.

  • При оценке сообщения несколько фильтров должны возвращать значение true .

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

Связывание протоколов

При маршрутизации сообщений между разнородными протоколами SOAP служба маршрутизации использует API-интерфейсы WCF для преобразования сообщения из одного протокола в другой. Это происходит автоматически, если конечная точка службы, представленная службой маршрутизации, использует протокол, отличный от протокола, используемого клиентской точкой, в которую перенаправляются сообщения. Данное поведение можно отключить, если используемые протоколы не являются стандартными. Однако затем необходимо предоставить свой собственный код преобразования.

Обработка ошибок

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

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

Инструкции по настройке обработки ошибок см. в разделе "Практическое руководство. Обработка ошибок".

В этом разделе

Практическое руководство. Управление версиями службы

Практическое руководство. Секционирование данных служб

Практическое руководство. Динамическое обновление

Практическое руководство. Обработка ошибок

См. также