Перейти к тексту

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

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

Вся введенная информация защищена.

  • Закрыть [x]

При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

Вся введенная информация защищена.

  • Закрыть [x]

IBM WebSphere Developer Technical Journal: Усовершенствования динамической маршрутизации в WebSphere Enterprise Service Bus V6.0.2

Грэг Фларри, старший сотрудник технической службы, IBM India Software Lab Services and Solutions
Грэг Фларри (Greg Flurry) является старшим сотрудником технической службы в группе IBM Enterprise Integration Solutions. В сферу его ответственности входит работа с пользователями по теме ориентированных на службы решений и продвижение соответствующих продуктов IBM.

Описание:  Узнайте, как существенные усовершенствования динамической маршрутизации в IBM® WebSphere® Enterprise Service Bus V6.0.2 могут улучшить ваши сервис-ориентированные решения.

Дата:  10.12.2007
Уровень сложности:  средний
Активность:  1019 просмотров
Комментарии:  


Из IBM WebSphere Developer Technical Journal.

Введение

В 2006 году я написал статью "Динамическая маршрутизация времени исполнения в WebSphere Enterprise Service Bus" (developerWorks, 2006), в которой рассматривались ограничения динамической маршрутизации в WebSphere Enterprise Service Bus V6.0.1 и демонстрировались некоторые приемы их обхода. К счастью, в WebSphere Enterprise Service Bus Version 6.0.2 (здесь и далее WebSphere ESB) эти ограничения были устранены и добавились новые функциональные возможности, которые значительно облегчают динамическую маршрутизацию в соединении с реестром сервисов.

В данной статье я расскажу о механизме динамической оконечной точки, реализованном в WebSphere ESB V6.0.2 (WebSphere ESB), и о том, как можно его использовать. Я также продемонстрирую использование примитивов-посредников (mediation primitives), новой функциональной возможности Version 6, для поддержки двух различных форм разрешения оконечной точки, которую вы можете использовать в сочетании с механизмом динамической оконечной точки для обеспечения динамической маршрутизации.


Статическая маршрутизация для SOAP/HTTP

В предыдущей статье я продемонстрировал, как с помощью WebSphere Integration Developer V6.0.1 (Integration Developer) создать модуль-посредник WebSphere ESB, поддерживающий только статическую маршрутизацию. То же самое (по аналогии) можно сделать при помощи Integration Developer V6.0.2, поэтому я не буду повторять эту процедуру в данной статье.

Процесс создания статической маршрутизации в предыдущей статье включал в себя определение проекта Business Integration Library, называемого Resources, содержащего WSDL для Web-сервиса BigEcho (см. листинг 1). Для примеров в данной статье необходимо создать библиотеку, используя Integration Developer V6.0.2.


Листинг 1. Определение сервиса BigEcho
                
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://big.com"
xmlns:impl="http://big.com"
xmlns:intf="http://big.com"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:wsi="http://ws-i.org/profiles/basic/1.1/xsd"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <wsdl:types>
  <schema targetNamespace="http://big.com"
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:impl="http://big.com"
xmlns:intf="http://big.com"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <complexType name="BEData">
    <sequence>
     <element name="one" nillable="true" type="xsd:string"/>
     <element name="two" nillable="true" type="xsd:string"/>
    </sequence>
   </complexType>
   <element name="echoResponse">
    <complexType>
     <sequence>
      <element name="echoReturn" nillable="true" type="impl:BEData"/>
     </sequence>
    </complexType>
   </element>
   <element name="echo">
    <complexType>
     <sequence>
      <element name="d" nillable="true" type="impl:BEData"/>
     </sequence>
    </complexType>
   </element>
  </schema>
 </wsdl:types>

 <wsdl:message name="echoRequest">
    <wsdl:part element="impl:echo" name="parameters"/>
 </wsdl:message>
 <wsdl:message name="echoResponse">
    <wsdl:part element="impl:echoResponse" name="parameters"/>
 </wsdl:message>

 <wsdl:portType name="BigEcho">
    <wsdl:operation name="echo">
       <wsdl:input message="impl:echoRequest" name="echoRequest"/>
       <wsdl:output message="impl:echoResponse" name="echoResponse"/>
    </wsdl:operation>
 </wsdl:portType>

 <wsdl:binding name="BigEchoSoapBinding" type="impl:BigEcho">
    <wsdlsoap:binding style="document" 
transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="echo">
       <wsdlsoap:operation soapAction=""/>
       <wsdl:input name="echoRequest">
          <wsdlsoap:body use="literal"/>
       </wsdl:input>
       <wsdl:output name="echoResponse">
          <wsdlsoap:body use="literal"/>
       </wsdl:output>
    </wsdl:operation>
 </wsdl:binding>

 <wsdl:service name="BigEchoService">
    <wsdl:port binding="impl:BigEchoSoapBinding" name="BigEcho">
       <wsdlsoap:address
location="http://localhost:9080/BigEcho/services/BigEcho"/>
    </wsdl:port>
 </wsdl:service>
</wsdl:definitions>
			

На рисунке 1 показана показана компоновочная схема Integration Developer, получаемая после создания модуля-посредника. Можно увидеть компоненты экспорта (слева) и импорта (справа), а также компонент-посредник (в центре).


Рисунок 1. Компоновка модуля-посредника StaticRoute
Рисунок 1. Сборка модуля-посредника StaticRoute

На рисунке 2 показано отображение операций для компонента-посредника в редакторе Mediation Flow. Интерфейс компонента-посредника BigEcho представлен слева, а ссылка компонента-посредника BigEchoPartner - справа.


Рисунок 2. Отображение операций для StaticRoute
Рисунок 2. Отображение операций для StaticRoute

На рисунке 3 показана простая схема потока данных запроса, в котором узел Input (представляющий запрос от Export1), связывается с интерфейсом компонента-посредника. Интерфейс компонента-посредника соединяется непосредственно со ссылкой компонента-посредника. Узел Callout (представляющий запрос к Import1) связывается со ссылкой компонента-посредника. Такая компоновка передает входящий запрос непосредственно из Export в Import без обработки. Обратите внимание на различия во внешнем виде артефактов в редакторе Mediation Flow версий 6.0.1 и 6.0.2; в 6.0.2 представления экспорта и интерфейса, а также ссылки и импорта, различны. Я поясню важность этого далее.


Рисунок 3. Схема прохождения запроса в StaticRoute
Рисунок 3. Схема прохождения запроса в StaticRoute

На рисунке 4 показана простая схема обработки ответа, в которой узел CalloutResponse (представляющий ответ от Import1) связан со ссылкой компонента-посредника, который непосредственно соединен с интерфейсом компонента-посредника, связанного с узлом InputResponse (представляющим ответ в Export1). Такая схема передает входящий ответ непосредственно из Import в Export.


Рисунок 4. Схема прохождения ответа в StaticRoute
Рисунок 4. Схема прохождения ответа в StaticRoute

Как говорилось в предыдущей статье, после сохранения модуля-посредника и развертывания его на тестовом сервере (либо WebSphere ESB, либо WebSphere Process Server Version 6.0.2) можно приступить к тестированию модуля-посредника. Самый простой способ сделать это - использовать Web Services Explorer. Реализация используемого нами сервиса BigEcho выполняется в той же тестовой среде, что и модуль-посредник StaticRoute, поэтому в консоли тестовой среды отображается сообщение +++ Got to BigEcho. Это говорит о том, что модуль-посредник активизировал сервис BigEcho от имени запросчика сервиса, в данном случае Web Services Explorer.

Конечно, StaticRoute довольно скучен, поскольку на самом деле он ничего не делает. Более того, если нужно изменить статический адрес, указанный в Import, то придется изменить модуль-посредник и повторно развернуть его. Однако данный пример демонстрирует слабую связь (decoupling) запросчика сервиса и провайдера, показывает преемственность между версиями 6.0.1 и 6.02, и намечает тему нашего дальнейшего обсуждения.


Динамические оконечные точки

После завершения работы с модулем-посредником StaticRoute перейдите к потоку данных запроса в редакторе Mediation Flow и выберите узел Callout, связанный со ссылкой компонента-посредника. Затем перейдите в закладку Properties и выберите Details, как показано на рисунке 5.


Рисунок 5. Свойства Callout Properties потока данных запроса StaticRoute
Рисунок 5. Свойства Callout Properties потока данных запроса StaticRoute

Обратите внимание на флажок с названием Use dynamic endpoint if set in the message header (Использовать динамическую оконечную точку, если это установлено в заголовке сообщения). Он означает, что если сообщение запроса в потоке данных посредника запроса содержит адрес в заголовке, сообщение передается провайдеру по указанному адресу.

В реальности все несколько сложнее. Если данное свойство отключено, будет использоваться статический адрес из компонента импорта, связанного со ссылкой; если компонента импорта, предоставляющего адрес, не существует, возникает исключение. При включенном свойстве (по умолчанию), если адреса в заголовке нет и имеется компонент импорта, используется статический адрес из последнего; опять же, если компонента импорта, предоставляющего адрес, не существует, генерируется исключение.

Важно понимать, что при включенном свойстве наличие компонента импорта не обязательно. Поскольку этот компонент не обязателен, вам не нужно связывание (binding). Это очень мощная возможность, поскольку она позволяет использовать различные адреса не только для доступа к провайдерам с одним и тем же связыванием, но с различными адресами, но также для доступа к провайдерам с различными типами связывания.

Важно отметить еще ряд моментов. В сообщении запроса (являющегося на самом деле объектом Service Message Object (SMO)) адрес динамической оконечной точки, идентифицирующий нужного провайдера, должен находиться в месте, указанном XPath-выражением /headers/SMOHeader/Target/address. Далее, адрес должен быть корректным URI одного из поддерживаемых связываний. В настоящее время поддерживаемыми связываниями являются SOAP/HTTP, SOAP/JMS и SCA (по умолчанию - SCA-модули). Ссылки на дополнительную информацию по механизму динамической оконечной точки приведены в разделе "Ресурсы".

Механизм динамической оконечной точки делает динамическую маршрутизацию очень простой и мощной - необходимо всего лишь поместить корректный адрес в /headers/SMOHeader/Target/address для передачи запросов нужному провайдеру, поддерживающему любое допустимое связывание. Так как же указать адрес в заголовке? К счастью, WebSphere ESB предлагает несколько вариантов для вставки адреса в заголовок:

  • Можно использовать пользовательский примитив-посредник (mediation primitive), аналогичный продемонстрированному в предыдущей статье.
  • Можно с помощью примитива-посредника DatabaseLookup извлечь значение ключа из сообщения запроса и использовать его для поиска соответствующего адреса путем вставки адреса в запрос.
  • Можно использовать примитив-посредник MessageElementSetter (новая возможность V6.0.2).
  • Можно использовать примитив-посредник EndpointLookup (новая возможность V6.0.2).

В данной статье я опишу последние два варианта.


Динамическая маршрутизация с использованием MessageElementSetter

Давайте рассмотрим подход к динамической маршрутизации, использующий механизм динамической оконечной точки и новый примитив-посредник MessageElementSetter.

  1. Во-первых, создайте модуль-посредник под названием MESRouter, ссылающийся на Resources Library в своих зависимостях, используя прием, продемонстрированный в руководстве "Начало работы с WebSphere Enterprise Service Bus и WebSphere Integration Developer". На рисунке 6 показана схема компоновки Integration Developer, созданная в результате следующих действий:
    • создание модуля-посредника, содержащего компонент-посредник, автоматически названный Mediation1;
    • добавление к модулю-посреднику компонента экспорт, автоматически названного Export1;
    • назначение интерфейса BigEcho компоненту Export1;
    • генерирование связывания Web-сервисов (HTTP) для Export1;
    • запись Export1 в Mediation1;
    • добавление в Mediation1 ссылки, содержащей определение интерфейса BigEcho.


    Рисунок 6. Схема компоновки для MESRouter
    Рисунок 6. Схема компоновки для MESRouter

    MESRouter содержит один компонент экспорт и компонент-посредник. Обратите внимание на то, что он не имеет компонента импорт, поскольку мы собираемся воспользоваться механизмом динамической оконечной точки.

  2. Откройте редактор Mediation Flow и отобразите операцию так, как показано на рисунке 2.
  3. Откройте схему потока данных запроса и поместите в него примитив-посредник MessageElementSetter. Соедините интерфейс компонента-посредника с входом примитива, а также выход примитива со ссылкой компонента-посредника, как показано на рисунке 7.

    Рисунок 7. Прохождение запроса MESRouter
    Рисунок 7. Прохождение запроса MESRouter

  4. Нажмите MessageElementSetter1, перейдите на вкладку Properties и выберите Details. Вы увидите таблицу троек {Target, Type, Value}, которые определяют, какие элементы (и в какое значение) устанавливаются в сообщении. Нажмите кнопку Add для отображения диалогового окна Add/Edit, показанного на рисунке 8.
  5. Нажмите Custom XPath и задайте месторасположение в SMO, куда будет помещаться адрес.

    Рисунок 8. Диалоговое окно Add/Edit
    Рисунок 8. Диалоговое окно Add/Edit

  6. В диалоговом окне Build the XPath Expression разверните headers => SMOHeader => Target и выберите адрес, как показано на рисунке 9, а затем нажмите кнопку OK, чтобы вернуться в диалоговое окно Add/Edit.

    Рисунок 9. Диалоговое окно конструктора выражений XPath
    Рисунок 9. Диалоговое окно конструктора выражений XPath

  7. 7. Введите адрес провайдера, которому перенаправляется сообщение. Для этого первого теста введите значение Web-сервиса SOAP/HTTP, приведенное в WSDL-файле (листинг 1), а затем нажмите кнопку Finish в диалоговом окне Add/Edit. Должны отобразиться свойства примитива, как показано на рисунке 10.

    Рисунок 10. Свойства MessageElementSetter1
    Рисунок 10. Свойства для MessageElementSetter1

  8. Соедините поток данных запроса точно так, как показано для StaticRoute на рисунке 4.
  9. Сохраните поток данных модуля-посредника и сам модуль-посредник, разверните MESRoute в тестовой среде.
  10. Протестируйте модуль, используя Web Services Explorer. Реализация сервиса BigEcho выполняется в той же тестовой среде, что и модуль-посредник MESRoute, поэтому он отображает сообщение +++ Got to BigEcho в консоли тестовой среды, показывая, что модуль-посредник активизирует сервис BigEcho.

Для демонстрации гибкости механизма динамической оконечной точки создадим еще один провайдер сервисов. Вместо связывания SOAP/HTTP, используемого в сервисе BigEcho (листинг 1), здесь используется связывание SOAP/JMS.

Проще всего сделать это, используя Integration Developer для создания бизнес-модуля, выполняющегося на сервере WebSphere Process Server. Подробное описание процесса выходит за рамки данной статьи, но модуль должен иметь компонент экспорта со связыванием Web-сервисов (SOAP/JMS) и Java™-компонент, выводящий при активизации сообщение +++++ Got to BigEchoJMS на консоль. В листинге 2 приведен WSDL-файл, сгенерированный программой Integration Developer для описания сервис-провайдера с именем BigEchoJMS.


Листинг 2. Определение сервиса BigEchoJMS
                
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions name="Export1_BigEchoJms_Service" 
targetNamespace="http://big.com/Binding"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:Port_0="http://big.com"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:this="http://big.com/Binding"
xmlns="http://schemas.xmlsoap.org/wsdl/">
  <wsdl:import namespace="http://big.com" location="BigEcho.wsdl"/>
  <wsdl:binding name="Export1_BigEchoJmsBinding" type="Port_0:BigEcho">
    <soap:binding style="document" 
transport="http://schemas.xmlsoap.org/soap/jms"/>
    <wsdl:operation name="echo">
      <soap:operation/>
      <wsdl:input name="echoRequest">
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output name="echoResponse">
        <soap:body use="literal"/>
      </wsdl:output>
      <wsdl:fault name="BadBoyException">
        <soap:fault name="BadBoyException" use="literal"/>
      </wsdl:fault>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="Export1_BigEchoJmsService">
  <wsdl:port name="Export1_BigEchoJmsPort"
binding="this:Export1_BigEchoJmsBinding">
      <soap:address
location="jms:/queue?destination=jms/Export1&
	connectionFactory=jms/Export1QCF&
	targetService=Export1_BigEchoJmsPort"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>
				

  1. Откройте редактор Mediation Flow для MESRouter и перейдите на вкладку Property, а затем выберите Details для MessageElementSetter1. Вы должны увидеть нечто похожее на рисунок 10.
  2. Измените значение поля для /headers/SMOHeader/Target/address так, чтобы оно содержало JMS-адрес модуля BigEchoJMS (он будет аналогичен указанному в атрибуте location элемента address в листинге 2).
  3. Сохраните модуль-посредник и перезапустите его.
  4. Если вы протестируете MESRouter опять, то увидите в консоли тестовой среды сообщение +++++ Got to BigEchoJMS, показывающее, что модуль-посредник активизировал провайдер BigEchoJMS. У вас изменился не только адрес провайдера, но и тип связывания с провайдером!

Еще одним преимуществом использования примитива-посредника MessageElementSetter является то, что WebSphere ESB V6.0.2 разрешает поддерживать такие свойства, как значение адреса провайдера, помещенное в SMO-заголовок. Это делает такие свойства доступными в консоли администратора WebSphere ESB, в результате их можно изменять после развертывания без повторного его выполнения.

На рисунке 11 показано, как можно было бы поддерживать адрес провайдера для MessageElementSetter1 в модуле-посреднике MESRouter. После этого можно найти и изменить адрес под названием MessageElementSetter1.targetAddress в консоли администратора. Это позволяет после развертывания модуля-посредника MESRouter изменить адрес с провайдера BigEcho на провайдера BigEchoJMS. Данная функциональная возможность позволяет легко решать такие административные задачи, как изменение целевого адреса при перемещении сервис-провайдеров из одной среды в другую. Дополнительная информация по поддерживаемым свойствам приведена в разделе "URI примера динамической оконечной точки" в WebSphere Integration Developer Information Center.


Рисунок 11. Поддерживаемые свойства
Рисунок 11. Поддерживаемые свойства

Существует еще одна функциональная возможность MessageElementSetter, о которой необходимо знать. При создании назначения (target) элемента message в диалоговом окне Add/Edit (рисунок 8), вы оставили в поле Type значение String, чтобы поле Value могло быть желаемой строковой константой. Однако поле Type имеет дополнительные варианты, одним из которых является copy, позволяющий копировать значение из любого места сообщения (также указываемого XPath-выражением) в желаемое место (в данном случае - адрес, используемый механизмом динамической оконечной точки). Эта возможность используется для осуществления некоторых форм маршрутизации, зависящей от содержимого.


Динамическая маршрутизация с использованием EndpointLookup

Теперь давайте рассмотрим новый примитив-посредник EndpointLookup, созданный специально для использования механизма динамической оконечной точки. Одной из ключевых характеристик динамической маршрутизации, выполняемой ESB, является возможность управления с использованием метаданных. Это позволяет создавать более целостные сервис-ориентированные решения, тесно интегрированные в общую модель управления предприятием. Основой этого подхода является реестр сервисов. Роль реестра сервисов в сервис-ориентированных решениях выполняет программа IBM WebSphere Service Registry and Repository (здесь и далее называемая Service Registry and Repository). Ссылки на информацию о Service Registry and Repository приведены в разделе "Ресурсы". Хотя Service Registry and Repository охватывает широкое разнообразие задач, я сконцентрируюсь на динамической маршрутизации на основе метаданных, поддерживаемых программой Service Registry and Repository.

Примитив-посредник EndpointLookup позволяет компоненту-посреднику использовать Service Registry and Repository для реализации управляемой метаданными динамической маршрутизации без применения специального программного кода. Примитив-посредник EndpointLookup позволяет компоненту-посреднику извлекать информацию оконечной точки из Service Registry and Repository. Дополнительная информация приведена в разделе "Примитив-посредник EndpointLookup" WebSphere ESB Information center. Информация оконечной точки сервиса может иметь отношение к Web-сервисам или к SCA-модулям экспорта с Web-сервисами или SCA-связываниями.

Примитив запрашивает в Service Registry and Repository информацию оконечной точки, соответствующую критериям, указанным в свойствах примитива. Обязательными являются только критерии, имеющие отношение к типу WSDL-порта провайдера, но критерии также могут включить определенные пользователем свойства и классификации. Примитив также имеет свойство match policy (политика соответствия), указывающее примитиву возвращать одно или все соответствия. В случае одного соответствия примитив автоматически вставляет адрес оконечной точки в SMO-заголовок для управления механизмом динамической оконечной точки. При опции «все соответствия» необходимо вставить в поток данных дополнительный примитив, который будет обрабатывать соответствия и выбирать из них один для управления механизмом динамической оконечной точки.

Теперь давайте рассмотрим, возможно, самое простое, но, тем не менее, интересное - использование примитива-посредника EndpointLookup. Для реализации примера необходимо установить Service Registry and Repository, включая последний пакет исправления ошибок (см. раздел "Ресурсы"). Вы должны также определить Service Registry and Repository в WebSphere ESB или WebSphere Process Server, на котором планируете выполнять модуль-посредник, использующий EndpointLookup; это необходимо даже для тестовой среды в Integration Developer.

  1. Для настройки экземпляра Service Registry and Repository в среде сервера откройте консоль администратора, выберите Service Integration => WSRR definitions и нажмите кнопку New. На рисунке 12 показано определение экземпляра Service Registry and Repository, TestWSRR, используемого для демонстрации EndpointLookup. Обратите внимание на то, что псевдоним аутентификации установлен на незащищенное соединение с Service Registry and Repository.

    Рисунок 12. Определение Service Registry and Reposity в тестовой среде
    Рисунок 12. Определение Service Registry and Reposity в тестовой средеt

  2. Загрузите или опубликуйте WSDL-документ для провайдера BigEcho, как показано на рисунке 13.

    Рисунок 13. Опубликованный WSDL-документ для провайдера BigEcho
    Рисунок 13. Опубликованный WSDL-документ для провайдера BigEcho

    Приложение Service Registry and Repository понимает WSDL-документы и создаст логические элементы, определенные в WSDL-документе. На рисунке 14 показан созданный тип WSDL-порта, на рисунке 15 показано связывание, на рисунке 16 - сервис, а на рисунке 17 - порт.



    Рисунок 14. Тип порта для провайдера BigEcho
    Рисунок 14. Тип порта для провайдера BigEcho



    Рисунок 15. Связывание для провайдера BigEcho
    Рисунок 15. Связывание для провайдера BigEcho



    Рисунок 16. Сервис для провайдера BigEcho
    Рисунок 16. Сервис для провайдера BigEcho



    Рисунок 17. Порт для провайдера BigEcho
    Рисунок 17. Порт для провайдера BigEcho

  3. Далее создайте новый модуль-посредник WSRRRouter, который использует примитив-посредник EndpointLookup. В редакторе компоновки выполните описанные выше инструкции для MESRouter, чтобы создать модуль-посредник, похожий на изображенный на рисунке 6.
  4. Откройте редактор Mediation Flow, отобразите операцию и создайте поток данных ответа, как делали это для MESRouter. В потоке данных запроса поместите примитив-посредник EndpointLookup. Соедините интерфейс компонента-посредника с входом примитива, а выход примитива - со ссылкой компонента-посредника (как показано на рисунке 18).

    Рисунок 18. Поток данных запроса WSRRRouter
    Рисунок 18. Поток данных запроса WSRRRouter

  5. Откройте свойства для EndpointLookup1, как показано на рисунке 19. Установите поля Name и Namespace для типа порта в значения, используемые для типа порта BigEcho. Можно нажать кнопку Browse для упрощения этого процесса. Оставьте поле Version пустым. Необходимо указать используемое приложение Service Registry and Repository; примитив будет извлекать информацию о доступе к этому Service Registry and Repository из среды сервера. Для данного примера введите TestWSRR в качестве Registry Name. Наконец, в поле Match Policy выберите вариант Return one matching endpoint. Сохраните поток данных посредника и модуль-посредник, затем разверните модуль в тестовой среде Integration Developer.

    Рисунок 19. Свойства EndpointLookup1
    Рисунок 19. Свойства EndpointLookup1

  6. Протестируйте WSRRRouter, используя Web Services Explorer. После получения запроса примитив-посредник запрашивает все порты, соответствующие указанному в свойствах типу порта. Поскольку BigEcho является единственным соответствием в данном тесте, в запросе возвращается информация об оконечной точке, и примитив помещает адрес оконечной точки в заголовок для управления механизмом динамической оконечной точки. Вы должны увидеть сообщение +++ Got to BigEcho в консоли тестовой среды, показывающее, что модуль-посредник активизировал провайдер BigEcho.

Давайте рассмотрим следующий сценарий.

  1. Загрузите WSDL-документ для провайдера BigEchoJMS в Service Registry and Repository. Если вы исследуете содержимое реестра, то увидите WSDL-документы для провайдера BigEchoJMS и провайдера BigEcho, как показано на рисунке 20.

    Рисунок 20. WSDL для BigEchoJMS и BigEcho
    Рисунок 20. WSDL для BigEchoJMS и BigEcho

    Поскольку оба провайдера реализуют одинаковый тип порта, в реестре определяется только тип порта BigEcho. Будут, конечно, существовать новые связывание, сервис и порт, как показано на рисунках 21, 22 и 23 соответственно.



    Рисунок 21. HTTP и JMS-связывания
    Рисунок 21. HTTP и JMS-связывания



    Рисунок 22. Сервисы BigEcho и BigEchoJMS
    Рисунок 22. Сервисы BigEcho и BigEchoJMS



    Рисунок 23. Порты BigEchoJMS и BigEcho
    Рисунок 23. Порты BigEchoJMS и BigEcho

  2. Без каких-либо изменений в WSRRRouter выполните тест опять. Возможно, в консоли тестовой среды вы увидите сообщение +++++ Got to BigEchoJMS, показывающее, что модуль-посредник активизировал провайдера BigEchoJMS вместо BigEcho.

Вы выполнили данные изменения просто при помощи метаданных. Это стало возможным потому, что хотя существует два соответствия типа порта, у вас установлена политика соответствий на возврат только первого. Поскольку JMS-версия была загружена последней, возможно, она будет первой обнаруженной в запросе; однако это не всегда так (все зависит от других действий в реестре).

Если вы хотите быть уверенным, что примитив выберет определенного провайдера, можете воспользоваться дополнительным критерием, применяемым в запросе, изменив свойства EndpointLookup1, как показано на рисунке 24.

  1. Выберите Details, затем перейдите в закладку Advanced.
  2. Нажмите кнопку Add в разделе User Properties, добавьте свойство под названием Preferred, тип string и значение yes.
  3. Сохраните поток данных и модуль посредника.

    Рисунок 24. Дополнительный критерий для WSRR-запроса
    Рисунок 24. Дополнительный критерий для WSRR-запроса

  4. Добавьте измененное свойство для нужного провайдера. В консоли Service Registry and Repository выберите Ports => BigEcho => Custom Properties. Нажмите кнопку New, добавьте новое свойство под названием Preferred со значением yes и сохраните информацию. Результаты показаны на рисунке 25.

    Рисунок 25. Измененное свойство для порта BigEcho
    Рисунок 25. Измененное свойство для порта BigEcho

  5. Снова протестируйте WSRRRouter. Вы увидите сообщение +++ Got to BigEcho в консоли тестовой среды, показывающее, что данный модуль-посредник активизировал провайдера BigEcho вместо BigEchoJMS.

И опять вы осуществили это изменение, используя возможности метаданных! Естественно, можно таким же образом гарантировать выбор провайдера BigEchoJMS путем установки значения свойства Preferred в yes на его порте, а свойства Preferred порта BigEcho - в любое значение, кроме yes (либо удалив это свойство).


Резюме

В данной статье были рассмотрены некоторые новые функциональные возможности WebSphere ESB V6.0.2. Они значительно расширили границы использования WebSphere ESB для выполнения управляемой метаданными маршрутизации. Однако в данной статье рассматриваются только основы. Подумайте о комбинировании примитивов-посредников MessageElementSetter и EndpointLookup для обеспечения управляемой метаданными маршрутизации в сочетании с настроенными администратором значениями по умолчанию. Можно также добавить к этой комбинации примитив-посредник MessageFilter для поддержки нескольких типов портов. Используя WebSphere ESB V6.0.2, вы можете выполнять мощную и гибкую динамическую маршрутизацию, которая значительно расширяет возможности ваших сервис-ориентированных решений.


Ресурсы

Научиться

Получить продукты и технологии

Обсудить

Об авторе

Грэг Фларри (Greg Flurry) является старшим сотрудником технической службы в группе IBM Enterprise Integration Solutions. В сферу его ответственности входит работа с пользователями по теме ориентированных на службы решений и продвижение соответствующих продуктов IBM.

Помощь по сообщениям о нарушениях

Сообщение о нарушениях

Спасибо. Эта запись была помечена для модератора.


Помощь по сообщениям о нарушениях

Сообщение о нарушениях

Сообщение о нарушении не было отправлено. Попробуйте, пожалуйста, позже.


developerWorks: вход


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


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

Выберите ваше отображаемое имя

При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

(Должно содержать от 3 до 31 символа.)


Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Оценить эту статью

Комментарии

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=WebSphere, SOA и Web-сервисы
ArticleID=276037
ArticleTitle=IBM WebSphere Developer Technical Journal: Усовершенствования динамической маршрутизации в WebSphere Enterprise Service Bus V6.0.2
publish-date=12102007
author1-email=flurry@us.ibm.com
author1-email-cc=

Теги

Help
Используйте форму поиска, чтобы найти любой контент с данным тегом в My developerWorks. Используйте ползунок, чтобы отразить больше или меньше тегов.

КнопкаПопулярные теги отображает самые распространенные теги для данной области контента (например: Java, Linux, WebSphere).

Кнопка Мои теги отображает Ваши теги для данной области контента (например: Java, Linux, WebSphere).

Используйте форму поиска, чтобы найти любой контент с данным тегом в My developerWorks. Кнопка Популярные теги отображает самые распространенные теги для данной области контента (например: Java, Linux, WebSphere). Кнопка Мои теги отображает Ваши теги для данной области контента (например: Java, Linux, WebSphere).