簡體   English   中英

如何使用 JMS API 從 Solace 偵聽器將 NACK 發送到 Solace 隊列?

[英]How to send NACK to Solace queue from Solace listener using JMS API?

需要您的幫助才能找到解決方案。 當前實施細節:

SolConnectionFactory connectionFactory = SolJmsUtility.createConnectionFactory(); // for create connection factory using host , vpn,trust store,keystore with auth scheme AUTHENTICATION_SCHEME_CLIENT_CERTIFICATE
this.connection = connectionFactory.createConnection(); // connection creation
session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE); // session creation using client acknowledge

使用 MessageListener 監聽隊列

public class MyListener implements MessageListener 

    public void onMessage(Message message) // receive the message and process
    { 
        /* in this method validating the message (poison message) 
         * and publish to kafka, once receive the success message
         * from kafka acknowledge the message
         */
        message.acknowledge();
    }

問題:如果Kafka broker掛了怎么重試? 我們與內部 Solace 團隊進行了討論。

我們假設如果客戶端沒有調用message.acknowledge() Solace 將進行重試,但內部 Solace 團隊澄清說它正在使用窗口機制,因此如果后續消息被確認,那么先前的消息也將被確認並刪除。

他們的建議是針對失敗的消息發回 NACK(否定確認),然后 Solace 可以重試該消息。 如何使用 Java API 發送 NACK?

Max_Un_Ack_MessageMax_Redeliver_Count的建議值是多少?

Maven 安慰的依賴:

<dependency>
    <groupId>com.solacesystems</groupId>
    <artifactId>sol-jms</artifactId>
    <version>10.0.0</version>
</dependency>

如果您使用的是 JMS API 並且您想要觸發重新投遞,那么您有幾個選擇。

您可以使用已交易的 session 當處理消息成功時,您確認該消息並commit() javax.jms.Session 當處理不成功時,您在javax.jms.Session上調用rollback()

或者,您可以使用javax.jms.Session.recover() 這是 JavaDoc 所說的:

停止此 session 中的消息傳遞,並使用最早的未確認消息重新開始消息傳遞。

所有消費者都按順序傳遞消息。 確認收到的消息會自動確認所有已傳遞給客戶端的消息。

重新啟動 session 會導致它執行以下操作:

  • 停止消息傳遞
  • 將所有可能已送達但未確認的消息標記為“已重新送達”
  • 重新啟動傳遞序列,包括之前傳遞的所有未確認的消息。 重新投遞的消息不必完全按照其原始投遞順序投遞。

當然,這是假設 Solace JMS 客戶端實際實現了此處指定的行為。

根據此處的討論, message.acknowledge()與窗口化無關。 由於您在示例中使用的是異步解決方案,如果您不調用stop() ,傳輸 window 將關閉並且消息將不會被確認。

message.acknowledge()僅用於確認消息已被接收和使用,其中消息已從 Solace 代理的持久存儲中刪除。 請注意,未確認的消息只會在下一個要連接的消費者上重新傳遞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM