Quarkus IBM MQ集成

问题描述 投票:0回答:1

我正在寻找将Quarkus(仅CDI而没有EJB)与IBM MQ集成的解决方案。有人有这样的问题吗?或有任何想法。

我用于连接的参数:

  • 主机
  • 端口
  • 频道
  • 队列管理器
  • 队列名称

我知道我可以像在独立应用程序中那样,以bean的形式创建自己的连接工厂,然后再建立一组消费者。这实际上是我的替代解决方案。但是,也许有更好或更“漂亮”的解决方案。也许像骆驼这样的库允许这样的配置?我找不到这样的配置示例

java apache-camel cdi ibm-mq quarkus
1个回答
3
投票

当前,用于MQ的标准Java编程接口是JMS。您可以通过将以下内容添加到您的maven pom.xml中,将MQ JMS客户端作为对项目的依赖关系来引入:

    <!-- 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>

这将使您能够使用JMSFactoryFactory类在应用程序内以编程方式创建JMS ConnectionFactory,如下所述:

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对象(还需要定义该属性以包含要在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;
}
© www.soinside.com 2019 - 2024. All rights reserved.