• Базы данных
  • Oracle
  • Архитектура, проект и конфигурация федерации сервисных шин Oracle - Oracle Service Buses

Архитектура, проект и конфигурация федерации сервисных шин Oracle - Oracle Service Buses - Использование динамической маршрутизации сообщений для выбора удаленного домена

ОГЛАВЛЕНИЕ

Использование динамической маршрутизации сообщений для выбора удаленного домена

Если для используемой статичной конфигурации конечных точек proxy - и бизнес-сервисов не достаточно, то можно маршрутизировать сообщение, используя заголовок, прочитанные во время выполнения. Чтобы совершить это, нужно сконфигурировать действие Dynamic Routing (или Dynamic Publishing, если ответ не ожидается).

Когда конфигурируется Dynamic Routing, вы должны специфицировать сервис. Если это простой (plain) JMS -сервис, вы специфицируете полную дорогу к нему. Если же сервис основан на WSDL, вы выбираете его из WSDL. Специфицирование операции опционально. Dynamic Routing и Dynamic Publishing позволяют динамически выбирать сервисы на основе содержания сообщения или заголовков, причем возможно преобразование сообщений с помощью целевого сервиса.

Ниже приведены примеры, показывающие, как предоставить имя сервиса непосредственно или используя XQuery :

<ctx:route>
   <ctx:service isProxy="false">soapjms/JMSTransportService-BS</ctx:service>
   <ctx:operation>{$operation}</ctx:operation>
</ctx:route>

<ctx:route>
   <ctx:service isProxy="false">{$header/service[0]/text() }</ctx:service>
   <ctx:operation>{$operation}</ctx:operation>
</ctx:route>

Вы можете также создать Query for Dynamic Routing, как ресурс, и специфицировать имя этого ресурса в конфигурации. Такая маршрутная команда будет соответствовать сервису и операции, если это обеспечено в определении бизнес-сервиса, и вызовет этот сервис (операцию).

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

Лучший способ организовать Dynamic Routing - это создать таблицу роутинга (Routing Table). Эта Routing Table представляет собой просто XML -файл, зарегистрированный как XQuery ресурс, например:

<routing>
   <row>
      <logical>osb1</logical>
      <physical>soapjms/JMSTransportService-BS1</physical>
   </row>
   <row>
      <logical>osb2</logical>
      <physical>soapjms/JMSTransportService-BS2</physical>
   </row>
</routing>

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

<ctx: route>
    <ctx: service>
        {$routingtable/row[logical/text()=$logicalidentifier]/physical/text()}
    </ctx: service>
</ctx: route>

$ logicalidentifier будет действительным XPath для извлечения логического идентификатора из сообщения. Если сообщение содержит этот логический идентификатор в своем теле, выражение XPath начнется с $ body.

Конфигурирование OSB для Dynamic Routing описано в секции " Using Dynamic Routing " документа Modeling Message Flow в OSB.

Установка атрибутов маршрутизации с опциями маршрутизации

Действие Routing Options предназначено для установки различных свойств в переменной Message Context уходящего сообщения. Эти свойства включают Quality - of - Service, URI и Mode, которые влияют на действия по публикации и маршрутизации (Publish and Route). Хотя эти элементы могут быть установлены с применением Assign, Insert, Replace и Delete, их использование требует некоторого знания XPath и/или XQuery, также как и знания XML -структуры контекстного значения уходящего сообщения.

Цель действия Routing Options - облегчить для пользователя установку этих свойств. Кроме того, производительность - это дополнительная цель, так как основное представление переменных контекста входящих и уходящих (сообщений), начиная с AquaLogic Service Bus 2.5 - это POJO (Plain Old Java Object). Это действие позволяет прямую манипуляцию POJO, вместо обработки в формате XML, что требует больше действий преобразований.

Набор свойств, с которыми можно манипулировать по действию Routing Options :

  • URI - специфицирует место посылки сообщения
  • Mode - специфицирует шаблон коммуникаций - запрос только или запрос-ответ
  • Quality - of - service - специфицирует качество сервиса - наилучшее (best - effort) или однократное (exactly - once)
  • Retry - count - специфицирует число попыток, которые транспортный слой должен предпринять в случае ошибок
  • Retry - interval - специфицирует время ожидания в миллисекундах между попытками

Замечание: При выполнении действия Routing Options, значение контекста уходящего сообщения выбирается из Message Context. Если эта значение еще не определено, будет сгенерирована ошибка. Иначе, это действие перейдет к установке этих элементов в уходящем сообщении как специфицировано в конфигурации действия.

Заключение

Цель этой статьи в том, чтобы показать, что Oracle Service Bus разработана с возможностью формирования федераций. Мы хотим обратить внимание IT -департаментов на преимущества развертывания с самого начала сети сервисных шин. Такой подход окажется правильным в стратегическом отношении в предвидении будущего роста IT -инфраструктуры.

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

Ирен Русман (Irene Rusman) - старший софтверный инженер корпорации Oracle. Она работает над системной интеграцией на основе Oracle Service Bus