首页 > 解决方案 > 当我 nack() 发布/订阅消息时,它不会被重新传递

问题描述

似乎当我对 pub/sub 消息 (message.nack()) 进行 Nack 时,pub/sub 会转储该消息并且永远不会重试再次发送它。我也没有在谷歌云的订阅控制台中看到未确认的消息。如果我不确认该消息,则 pub/sub 会在一段时间后释放该消息,在这种情况下会重新发送它(带有消息:Dropping 1 items because they are Leed too long)。

服务是我自己的类,如果它可以发布,它将返回消息,如果它不相关则返回“确认”(确认而不发布它)或不确认它,如果服务尚未准备好发布它。

我正在使用以下软件包:google-api-core==1.16.0 google-cloud-pubsub==1.5.0 Flask==1.1.2

整个服务在 kubernetes 集群上使用 flask 运行。

subscriber = pubsub_v1.SubscriberClient(credentials=credentials)
subscription_path = subscriber.subscription_path(project_id, subscription_name)
def callback(message):
    enriched_message = Service.enrich(promo, message.data, 0)

    # Ckeck if a message has to be published to the topic or not.
    if enriched_message == 'acknowledge':
        message.ack()
    elif enriched_message == 0:
        message.nack()
    elif enriched_message != 0:
        answer = CrmPosService.pub(enriched_message)
        if answer == 'acknowledge':
            message.ack()

try:
    future = subscriber.subscribe(subscription_path, callback=callback)
    # Keep the main thread from exiting so the subscriber can
    # process messages in the background.
    while True:
        time.sleep(1)
except Exception as ex:
    logger.error('Could not subscribe')
    logger.error(ex, exc_info=True)
    raise ex

标签: pythonflaskgoogle-cloud-platformgoogle-cloud-pubsub

解决方案


推荐阅读