Здравствуйте!
Занимаюсь разработкой и проектированием интеграционных сервисов под IBM Integration Bus и хочу поделиться, на мой взгляд, полезной информацией.
В процессе работы над новым сервисом возникла необходимость создать адаптер к ИС реализующей интерфейс очередей сообщений Oracle Advanced Queuing.
Проведя некоторый research, выделил три варианта интеграции в порядке приоритета:
Я рассчитывал легко отделаться т.к. был уверен, что выберут один из первых двух вариантов. В базе знаний IBM подробно описано как настроить взаимодействие с указанными продуктами. Но, к сожалению, по ряду причин, выбор пал на голую Java.
Несмотря на то, что это не очень корпоративно и исключает всякую поддержку вендора, адаптер я написал. Для тестирования решил использовать JMeter.
Про то как настроить отправку запросов в очереди AQ нашел тут.
Все получилось и навело на мысль, что данный механизм можно применить и на брокере, создав нешаблонный конфигурационный сервис типа JMSProvider. Необходимо только было избежать создания jar-ника с параметрами jndi и не светить креденшлы к базе.
Собственно, для этого нужно:
В итоге все работает на нативных узлах, почти без самодеятельности.
Надеюсь кому-нибудь будет полезно, ведь данный метод вендором не описан.
Занимаюсь разработкой и проектированием интеграционных сервисов под IBM Integration Bus и хочу поделиться, на мой взгляд, полезной информацией.
В процессе работы над новым сервисом возникла необходимость создать адаптер к ИС реализующей интерфейс очередей сообщений Oracle Advanced Queuing.
Проведя некоторый research, выделил три варианта интеграции в порядке приоритета:
- Oracle Messaging Gateway, т.к.
- Входит в лицензию Oracle EE. Благо в организации такая имеется
- Реализация MOM (message-oriented middleware) с отличными от Oracle системами обмена сообщениями, в том числе IBM MQ
- С IIB интегрируется c использованием нативных MQ-узлов (MQInput/MQOutput/MQGet)
- Oracle Internet Directory т.к.
- Реализует JNDI, необходимый для интеграции по JMS
- С IIB интегрируется c использованием нативных JMS-узлов (JMSInput/JMSOutput/JMSReceive)
- Кастомная реализация на Java т.к.
- Есть Java API для Oracle AQ
- С IIB интегрируется c использованием узла JavaCompute
Я рассчитывал легко отделаться т.к. был уверен, что выберут один из первых двух вариантов. В базе знаний IBM подробно описано как настроить взаимодействие с указанными продуктами. Но, к сожалению, по ряду причин, выбор пал на голую Java.
Несмотря на то, что это не очень корпоративно и исключает всякую поддержку вендора, адаптер я написал. Для тестирования решил использовать JMeter.
Про то как настроить отправку запросов в очереди AQ нашел тут.
Все получилось и навело на мысль, что данный механизм можно применить и на брокере, создав нешаблонный конфигурационный сервис типа JMSProvider. Необходимо только было избежать создания jar-ника с параметрами jndi и не светить креденшлы к базе.
Собственно, для этого нужно:
- Положить на файловую систему необходимые библиотеки aqapi.jar, jta.jar, ojdbc8.jar
- Связать креденшлы к базе с JNDI-ресурсом командой:
mqsisetdbparms BRK_NAME -n jndi::oracle.jms.AQjmsInitialContextFactory -u oracleUser -p oraclePassword
- Добавить 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"
- Далее использовать созданный конфигурационный сервис в JMS-узлах брокера. Пути к очередям или топикам указываются в нотации Queues/QUEUE_NAME, Topics/TOPIC_NAME. В случае использования destination list необходимо дописать jndi://, т.е. jndi://Queues/QUEUE_NAME.
В итоге все работает на нативных узлах, почти без самодеятельности.
Надеюсь кому-нибудь будет полезно, ведь данный метод вендором не описан.