为什么JMSConsumer为每个排队的消息创建一个新的MessageConsumer?

时间:2019-02-11 09:37:38

标签: apache-nifi

我正在使用Nifi-1.8,目前正在处理消耗来自Oracle Weblogic JMS队列中数据的NiFi Flow。 通过JndiJMSConnectionFactory应用ConsumeJMS处理器。 通过查看code,NiFi会为每个收到的消息创建一个MessageConsumer。

public void consume(final String destinationName, final boolean durable, final boolean shared, final String subscriberName, final String charset,
                    final ConsumerCallback consumerCallback) {
    this.jmsTemplate.execute(new SessionCallback<Void>() {
        @Override
        public Void doInJms(final Session session) throws JMSException {

            final MessageConsumer msgConsumer = createMessageConsumer(session, destinationName, durable, shared, subscriberName);
            try {
...
            } catch (Exception e) {
...
            } finally {
                JmsUtils.closeMessageConsumer(msgConsumer);
            }

            return null;
        }
    }, true);
}

据我所知,这导致nifi每条消息打开一个到jms服务器的新连接-在我看来,这似乎很麻烦,并且会在服务器上产生许多错误,因为许多重新身份验证步骤似乎失败。

我确实在这里找到其他questions,但没有答案。

我想像评论中提到的@daggett那样对处理器进行返工。

为什么处理器每次都会创建一个新的MessageConsumer?至少从nifi-1.1开始,这段代码就在那里。 我想知道这背后是否有原因。

0 个答案:

没有答案