【问题标题】:gcloud pubsub subscriptions pull often report empty message listgcloud pubsub 订阅 pull 经常报空消息列表
【发布时间】:2018-11-23 10:35:28
【问题描述】:

为什么“gcloud pubsub subscriptions pull”经常报空消息列表,而订阅中有消息需要确认?

见下图效果。消息 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.

【问题讨论】:

    标签: google-cloud-platform cloud gcloud google-cloud-pubsub


    【解决方案1】:

    您引用的提取消息是“优秀的”。这意味着在 Google Cloud Pub/Sub 认为无法从原始订阅者那里获得确认之前,不应将其提供给其他订阅者。具体来说,它会一直等到“确认截止日期”,然后再向另一个订阅者提供已发布的消息。

    From Google's Pub/Sub Documentation(强调我的):

    将消息发送给订阅者后,订阅者必须确认或丢弃该消息。一条消息一旦被发送出去并在订阅者确认之前就被认为是未完成的。 Cloud Pub/Sub 将反复尝试传递任何尚未确认或未处理的消息。 订阅者有可配置的有限时间或ackDeadline 来确认消息。一旦截止日期过去,未确认的消息就会变为未确认。

    从您分享的上下文来看,您似乎看到默认确认截止日期已超时:

    确认截止日期:如果您的代码在截止日期之前未确认消息,则会再次发送消息。 默认为 10 秒。您可以指定的最大自定义期限为 600 秒(10 分钟)。

    【讨论】:

    • 明确一点:这并不意味着只有一个订阅者会收到一次消息。谷歌的文档非常清楚,虽然他们试图只发送一次,但这并不能保证。很有可能您像上面那样运行测试约 1/1000 次,即使它已经在确认截止日期窗口内发送给另一个订阅者,您仍然会再次收到该消息。
    【解决方案2】:

    “经常拉空消息”的标题有点误导和隐含,标题也可以是“gcloud pubsub subscriptions pull acknowledges

    因为这就是您认为发生的事情,它返回一个空列表,从那里的答案将解释它实际上没有确认,但消息只是在确认截止日期之前暂时处于“未完成”状态到达,然后它又回到que。

    【讨论】:

      猜你喜欢
      • 2022-06-11
      • 2017-10-10
      • 2017-03-26
      • 2021-12-19
      • 1970-01-01
      • 2021-03-05
      • 1970-01-01
      • 2022-09-28
      • 2018-03-21
      相关资源
      最近更新 更多