Solace NIFI JMSConnectionFactoryProvider

Solace NIFI JMSConnectionFactoryProvider

我正在尝试使用 Appache NIFI ConsumeJMS 处理器连接到不同于默认设置的 VPN 上的 Solace Queues。当我尝试启用 JMSConnectionFactoryProvider 时,出现以下错误:

JMSConnectionFactoryProvider Failed to invoke @OnEnabled method due to java.lang.IllegalStateException: java.lang.IllegalStateException: Failed to load and/or instantiate class 'com.solacesystems.jms.SolConnectionFactory'

NIFI JMSConnectionFactoryProvider 提供通用服务来创建特定于供应商的 javax.jms.ConnectionFactory 实现。成功配置此服务后,即可提供 ConnectionFactory。

为什么 NIFI 无法在 Solace JMS API Jar 文件中找到 class?

-----更新--------

Solace JMS API 10.1.0 现在包含一个零参数默认构造函数,现在可以与 NiFi 集成。

这是一个示例配置:

  1. 控制器:

MQ ConnectionFactory 实现设置为 com.solacesystems.jms.SolConnectionFactoryImpl

  1. ConsumeJMS 处理器:

用户名字段也可以采用"myUsername@myMessageVPN".

的形式

----- 原创 ------

这里的问题是 Apache NiFi 没有使用可移植的方法来创建 ConnectionFactory。它试图通过调用一个零参数默认构造函数来创建一个 ConnectionFactory,但不能保证一个存在。

// From https://github.com/apache/nifi/blob/master/nifi-nar-bundles/nifi-jms-bundle/nifi-jms-cf-service/src/main/java/org/apache/nifi/jms/cf/JMSConnectionFactoryProvider.java
private void createConnectionFactoryInstance(ConfigurationContext context) {
    String connectionFactoryImplName = context.getProperty(CONNECTION_FACTORY_IMPL).evaluateAttributeExpressions().getValue();
    this.connectionFactory = Utils.newDefaultInstance(connectionFactoryImplName);
}

请注意,在 NiFi 的 JIRA https://issues.apache.org/jira/browse/NIFI-2701 到 "Add JNDI Factory support for JMS ConnectionFactory service" 上有一个条目。 (该条目的初始描述有点混乱,但评论更清楚。)

此时,Solace 仅支持通过标准 JNDI 查找 - javax.naming.InitialContext.lookup() 和通过 Solace 的专有方法 - SolJmsUtility.createConnectionFactory().

创建 ConnectionFactory

Solace 将研究为 ConnectionFactory.

实现零参数默认构造函数是否可行

http://dev.solace.com/integration-guides/nifi/ 开发并发布了 JNDI 连接提供程序。对这个提供商感兴趣的人,值得一探究竟。