为什么"gcloud pubsub订阅“经常报告一个空消息列表,而订阅中有消息要确认?
见下面的效果。消息118870127432164可以在订阅中获得,它从来没有被认可过,但是它经常没有被报道。
lab@ubu1:~$ while :; do date; gcloud pubsub subscriptions pull projects/PROJECT/subscriptions/killbill-queue; done
Wed Jun 13 15:31:48 -03 2018
┌──────┬─────────────────┬───────────────────────────────────────┬────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ DATA │ MESSAGE_ID │ ATTRIBUTES │ ACK_ID │
├──────┼─────────────────┼───────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ 6�� │ 118870127432164 │ billingAccountId=000000-000000-000000 │ TDgBRElTK0MLKlgRTgQhIT4wPkVTRFAGFixdRkhRNxkIaFEOT14jPzUgKEUSAgVPAihdeTBLNkFddgA-DRlyfWF0bFlFUAEQB3ZfWBEMYlxORAdzMhhzdWlyalsRBgZGUX9ZXzOA6NOyt7d6ZiQ9XhJLLD5-MzRFQV5AEg │
└──────┴─────────────────┴───────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Wed Jun 13 15:31:50 -03 2018
Listed 0 items.
Wed Jun 13 15:31:53 -03 2018
Listed 0 items.
Wed Jun 13 15:31:56 -03 2018
Listed 0 items.
Wed Jun 13 15:31:59 -03 2018
┌──────┬─────────────────┬───────────────────────────────────────┬────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ DATA │ MESSAGE_ID │ ATTRIBUTES │ ACK_ID │
├──────┼─────────────────┼───────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ 6�� │ 118870127432164 │ billingAccountId=000000-000000-000000 │ TDgBRElTK0MLKlgRTgQhIT4wPkVTRFAGFixdRkhRNxkIaFEOT14jPzUgKEUSAgVPAihdeTBLNkFddgA-DRlyfWF0bFlFUAEQB3ZfWBEMYlxORAdzMhhzdWlyalsRBgZGUX9ZXzOA6NOyt7d6ZiQ9XhJLLD5-MzRFQV5AEg │
└──────┴─────────────────┴───────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Wed Jun 13 15:32:01 -03 2018
Listed 0 items.
Wed Jun 13 15:32:05 -03 2018
Listed 0 items.
Wed Jun 13 15:32:07 -03 2018
Listed 0 items.发布于 2018-06-13 18:57:39
您所引用的拉出的消息是“出色的”。这意味着,在Google /Sub认为它将无法从原始订阅者那里得到确认之前,它不应该被授予另一个订阅者。具体来说,它将等到“确认截止日期”,然后再向另一个订阅者提供已发布的消息。
来自Google的Pub/Sub文档 (重点地雷):
一旦消息被发送到订阅服务器,订阅服务器必须确认或删除该消息。一条消息一旦被发送出去并在订阅者确认之前被认为是未完成的。Cloud /Sub将反复尝试传递未被确认或未完成的任何消息。订阅者有一个可配置的、有限的时间,或
ackDeadline**,来确认消息。**一旦截止日期过了,未完成的消息就不被确认了。
从您共享的上下文来看,您似乎看到了默认的确认截止日期超时:
确认截止日期:如果您的代码在截止日期之前没有确认消息,消息将再次发送。默认为10秒。--您可以指定的最大自定义截止时间为600秒(10分钟)。
发布于 2019-03-05 14:42:00
“经常拉空消息”标题有点误导和含蓄,标题也可以是"gcloud公共订阅拉确认“。
因为这是您认为它返回一个空列表时发生的情况,因此这里的答案将解释它实际上没有承认,但在达到ack截止日期之前,消息只是暂时处于“未完成”状态,然后又回到que。
https://stackoverflow.com/questions/50844102
复制相似问题