В настоящее время стандартным Java программным интерфейсом для MQ является JMS. Вы можете подключить MQ JMS-клиент в качестве зависимости к вашему проекту, добавив в свой maven pom следующее: xml:
<!-- JMS API interfaces -->
<dependency>
<groupId>javax.jms</groupId>
<artifactId>javax.jms-api</artifactId>
<version>2.0.1</version>
</dependency>
<!-- MQ JMS client packages -->
<dependency>
<groupId>com.ibm.mq</groupId>
<artifactId>com.ibm.mq.allclient</artifactId>
<version>${mq.version}</version>
</dependency>
</dependencies>
Это позволит вам программно создать JMS ConnectionFactory в вашем приложении, используя класс JMSFactoryFactory, как описано в:
https://www.ibm.com/support/knowledgecenter/en/SSFKSJ_9.0.0/com.ibm.mq.dev.doc/q032180_.htm
Это не позволяет вам использовать инъекцию, вам нужно объявить и создать свой ConnectionFactory в приложении сам по себе.
В Quarkus, чтобы иметь возможность внедрить объект ConnectionFactory в ваше приложение, вы можете написать собственное расширение. Подробнее о написании расширения можно узнать по адресу:
https://quarkus.io/guides/writing-extensions
Основное требование для этого - написать класс Producer во время выполнения вашего расширения. который создает объект JMSConnectionFactory с использованием свойств, определенных в объекте config (который также должен быть определен для хранения свойств, которые вы хотите установить в ConnectionFactory). Производителю потребуется метод, аналогичный:
@Produces
@ApplicationScoped
@DefaultBean
public ConnectionFactory connectionFactory() throws JMSException {
JmsFactoryFactory ff;
JmsConnectionFactory factory;
try {
// Get a new JMSConnectionFactory
ff = JmsFactoryFactory.getInstance(JmsConstants.WMQ_PROVIDER);
factory = ff.createConnectionFactory();
// Always work in TCP/IP client mode
factory.setIntProperty(CommonConstants.WMQ_CONNECTION_MODE, CommonConstants.WMQ_CM_CLIENT);
// Now set the properties in this ConnectionFactory from the config.
if (config.hostname.isPresent())
factory.setStringProperty(CommonConstants.WMQ_HOST_NAME, config.hostname.get());
if (config.port.isPresent())
factory.setIntProperty(CommonConstants.WMQ_PORT, config.port.get());
if (config.channel.isPresent())
factory.setStringProperty(CommonConstants.WMQ_CHANNEL, config.channel.get());
if (config.queuemanager.isPresent())
factory.setStringProperty(CommonConstants.WMQ_QUEUE_MANAGER, config.queuemanager.get());
}
catch (JMSException je) {
// Something went wrong. Either handle it here or throw it on.
throw je;
}
return factory;
}