2017-06-15 110 views
0

使用的Apache NiFi的JNDI連接工廠提供從http://dev.solace.com/integration-guides/nifi/安慰NIFI JMSConnectionFactoryProvider解除綁定/綁定

我試圖從消費(運行安慰JMS)是看到客戶端(NiFi ConsumeJMS處理器)消息不斷解除綁定該網站/綁定到隊列的原因是「客戶端發出解除綁定」。客戶端無法使用所有數據,導致「郵件過期丟棄」。什麼是導致解除綁定/綁定,我該怎麼做才能解決這個使用這個Nifi處理器。謝謝

回答

1

Apache NiFi正在關閉MessageConsumer後消費每封郵件。您可以參考org.apache.nifi.jms.processors.JMSConsumerhere的來源。

public void consume(final String destinationName, final ConsumerCallback consumerCallback) { 
    this.jmsTemplate.execute(new SessionCallback<Void>() { 
     @Override 
     public Void doInJms(Session session) throws JMSException { 
       ... 
       JmsUtils.closeMessageConsumer(msgConsumer); 

Solace JMS API的默認行爲是向消費者傳遞一批消息。但是,由於NiFi在消費1條消息後重復關閉連接,因此會導致剩餘的批量重新傳遞到下一個創建的消費者。

我相信您必須在端點上啓用了「Max Redelivery」設置,並且超過了「過期丟棄」這些消息的最大重傳數量。

此處的解決方案是將端點上的「Max Perivered Unacked Messages Per Flow」每個流量的最大傳送消息設置爲1,以確保只能傳送1條消息。

將連接工廠中的「AD窗口大小」消息接收屬性調整爲1也是一個好主意,以確保最佳性能。