繁体   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