python - 当我 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
解决方案
推荐阅读
- c# - 排序列表
> 在 C# 中 - python - Google Drive API 找不到任何文件夹
- c# - 反序列化列表
从 fetch 调用时...C# - unity3d - 我们如何在 Unity3D 的实体组件系统中获得刚体行为?
- vb.net - 我可以为从我的程序启动的进程设置标识属性吗?
- nativescript - 运行 tns 资源生成图标杀死 iOS 应用程序
- angularjs - 如何修复此代码以在网页上显示内容?
- css - 如何居中一个很棒的图标和跨度
- java - 在 Android Studio 中找不到 getExternalFilesDir() 函数的上下文
- r - 如何将套索和岭回归拟合(Glmnet)叠加到数据上?