Прямая интеграция IBM Integration Bus и Oracle AQ

Здравствуйте!

Занимаюсь разработкой и проектированием интеграционных сервисов под IBM Integration Bus и хочу поделиться, на мой взгляд, полезной информацией.

В процессе работы над новым сервисом возникла необходимость создать адаптер к ИС реализующей интерфейс очередей сообщений Oracle Advanced Queuing.

Проведя некоторый research, выделил три варианта интеграции в порядке приоритета:

  1. Oracle Messaging Gateway, т.к.

    • Входит в лицензию Oracle EE. Благо в организации такая имеется
    • Реализация MOM (message-oriented middleware) с отличными от Oracle системами обмена сообщениями, в том числе IBM MQ
    • С IIB интегрируется c использованием нативных MQ-узлов (MQInput/MQOutput/MQGet)

  2. Oracle Internet Directory т.к.

    • Реализует JNDI, необходимый для интеграции по JMS
    • С IIB интегрируется c использованием нативных JMS-узлов (JMSInput/JMSOutput/JMSReceive)

  3. Кастомная реализация на Java т.к.

    • Есть Java API для Oracle AQ
    • С IIB интегрируется c использованием узла JavaCompute

Я рассчитывал легко отделаться т.к. был уверен, что выберут один из первых двух вариантов. В базе знаний IBM подробно описано как настроить взаимодействие с указанными продуктами. Но, к сожалению, по ряду причин, выбор пал на голую Java.

Несмотря на то, что это не очень корпоративно и исключает всякую поддержку вендора, адаптер я написал. Для тестирования решил использовать JMeter.

Про то как настроить отправку запросов в очереди AQ нашел тут.

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

Собственно, для этого нужно:

  1. Положить на файловую систему необходимые библиотеки aqapi.jar, jta.jar, ojdbc8.jar
  2. Связать креденшлы к базе с JNDI-ресурсом командой:

    mqsisetdbparms BRK_NAME -n jndi::oracle.jms.AQjmsInitialContextFactory -u oracleUser -p oraclePassword

  3. Добавить JMS-провайдер, где в команде указать:

    • URL базы — параметр jndiEnvironmentParms
    • путь к папке с библиотеками — параметр jarsURL
    • наименование фабрики соединений — параметр connectionFactoryName
    • начальный контекст — параметр initialContextFactory
    • флаг поддержки транзакционности — параметр jmsProviderXASupport

    mqsicreateconfigurableservice BRK_NAME -c JMSProviders -o Service_AQ_JMS -n jarsURL,jndiEnvironmentParms,jmsProviderXASupport,connectionFactoryName,initialContextFactory -v "/home/mqm/aq/lib","db_url=jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=hostName) (PORT=1521))(CONNECT_DATA=(SERVICE_NAME=serviceName)))","true","QueueConnectionFactory","oracle.jms.AQjmsInitialContextFactory"

  4. Далее использовать созданный конфигурационный сервис в JMS-узлах брокера. Пути к очередям или топикам указываются в нотации Queues/QUEUE_NAME, Topics/TOPIC_NAME. В случае использования destination list необходимо дописать jndi://, т.е. jndi://Queues/QUEUE_NAME.

В итоге все работает на нативных узлах, почти без самодеятельности.

Надеюсь кому-нибудь будет полезно, ведь данный метод вендором не описан.
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 0

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Самое читаемое