gpt4 book ai didi

java - Quarkus IBM MQ 集成

转载 作者:行者123 更新时间:2023-12-01 19:29:18 25 4
gpt4 key购买 nike

我正在寻找将 Quarkus(仅 CDI,无 EJB)与 IBM MQ 集成的解决方案。有人遇到这样的问题吗?或者有什么想法。

我用来连接的参数:

  • 主持人
  • 端口
  • channel
  • 队列管理器
  • 队列名称

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

最佳答案

目前,MQ 的标准 Java 编程接口(interface)是 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

这不允许您使用注入(inject),您需要在应用程序本身中声明并创建 ConnectionFactory。

在 Quarkus 中,为了能够将 ConnectionFactory 对象注入(inject)到您的应用程序中,您可以编写自己的扩展。有关编写扩展的更多详细信息,请访问:

https://quarkus.io/guides/writing-extensions

其核心要求是在扩展的运行时部分编写一个 Producer 类,该类使用配置对象中定义的属性生成 JMSConnectionFactory 对象(还需要定义该对象以包含要在连接工厂)。生产者需要类似于以下的方法:

@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;
}

关于java - Quarkus IBM MQ 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60259012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com