簡體   English   中英

未通過回調處理的Google Cloud PubSub消息

[英]Google Cloud PubSub messages not processed by callback

我正在嘗試使用Google PubSub在兩個服務之間傳遞和接收消息。 但是,發送的某些消息似乎是隨機丟棄的,並且訂閱者的回調方法未對其進行處理。

發送消息時,約有一半的消息由回調方法處理。 對於另一半,該回調方法似乎根本沒有被調用(不記錄任何信息)。 但是,消息仍然從主題中消失,並且不會重新發送。

用於啟動訂閱服務器的代碼:

logger = logging.getLogger(LOGGER_NAME)
logger.info('Starting the pubsub subscriber')
subscriber = pubsub_v1.SubscriberClient()
subscription_path = subscriber.subscription_path(GOOGLE_CLOUD_PROJECT, SUBSCRIPTION_NAME)
subscriber.subscribe(subscription_path, callback=callback)
while True:
    try:
        sleep(60)
    except Exception as e:
        // Log exception

回調方法:

def callback(message):
    logger = logging.getLogger(LOGGER_NAME)
    logger.info(f'Recieved callback with message: {message}', extra = {'callback_message': message}  )
    // Process message

該錯誤似乎是在訂戶側。 消息是從發布者發送的,如果訂閱者未連接到主題,則消息不會消失。

我嘗試使用流控制來控制訂戶檢索到的消息數,但似乎沒有任何效果。

可以在不調用回調方法的情況下處理消息嗎? 還有其他一些原因導致消息可能從主題中消失的原因嗎?

編輯: 原來另一個服務正在讀取相同的訂閱,處理丟失的消息。

我知道您找到了問題的答案,但是我認為列出一些調試此類問題的有用步驟是值得的:

  1. 檢查以確保消息實際上已發布。 當發布成功,響應應該包括消息,例如的ID,如通過在所述APIFuture,產生字符串的Java發布方法。
  2. 檢查是否積壓了郵件。 您可以查看subscription/oldest_unacked_message_agesubscription/num_undelivered_messages通過為Stackdriver
  3. 請檢查您的訂戶上是否設置了流量控制 ,以防止您及時接收所有消息。 如果您設置了流控制並且阻止了所有消息的傳遞,則您可能會發現Stackdriver中未傳遞消息的數量正在增加。
  4. 確保您沒有其他訂閱同一訂閱消息的客戶端。 例如,也許您正在使用gcloud工具提取和查看消息。 在這種情況下,您可能不會在Stackdriver中看到未送達消息的數量增加。

如果在檢查完所有這些信息后仍不確定消息發生了什么,最好與支持人員聯系,提供項目名稱和訂閱名稱以及您認為未傳遞的任何消息的ID。

暫無
暫無

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

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