我在google pubsub中创建了一个主题,并在主题中创建了SUBSCRIPTION,并进行了以下设置
然后我写了一个puller in go,使用它的Receive提取并确认已发布的消息
package main
import (
...
)
func main() {
ctx := context.Background()
client, err := pubsub.NewClient(ctx, config.C.Project)
if err != nil {
// do things with err
}
sub := client.Subscription(config.C.PubsubSubscription)
err := sub.Receive(ctx, func(ctx context.Context, msg *pubsub.Message) {
msg.Ack()
})
if err != context.Canceled {
logger.Error(fmt.Sprintf("Cancelled: %s", err.Error()))
}
if err != nil {
logger.Error(fmt.Sprintf("Error: %s", err.Error()))
}
}
没什么好看的,它运作良好,但是过了一会儿(闲置3个小时后〜),它停止接收新发布的消息,没有错误,什么也没有。我想念什么吗?
答案 0 :(得分:1)
通常,订户可能停止接收消息的原因有几个:
subscription/backlog_bytes
的{{3}}来验证是否积压了工作。如果您的问题不属于这些类别之一,则最好与您的项目名称,主题名称和订阅名称联系以获得Google Cloud支持,以便他们可以将问题缩小到您的用户代码中,客户端库本身或服务。
答案 1 :(得分:1)
我正在经历类似的事情,并且我很确定没有其他订阅者在提取这些消息。
尝试以下操作:转到主题,创建一个新的虚假订阅(将其命名为任意名称,因为稍后将其删除)。之后,我立即完成了虚假订阅(我正在使用python sample code client进行订阅)和真实订阅。奇怪的解决方案,但也许使话题再次醒来。
希望来自Google的人可以为我们提供一些有关这里发生的情况的见解,但我绝对不会付给他们足够的费用来获得直接支持。
答案 2 :(得分:0)
几乎没有什么变化可以帮助您更好地调查问题: -检查接收错误 -为接收使用单独的上下文
ctx := context.Background()
err := sub.Receive(ctx, func(ctx context.Context, msg *pubsub.Message) {
msg.Ack()
})
if err != nil {
log.Fatal(err)
}
答案 3 :(得分:0)
您的代码以前可以工作吗?从今天开始,我在PubSub上遇到问题。 Python PubSub库中的诸如get_topic()
,create_topic()
之类的方法停止工作,但是在发送和提取消息方面没有任何问题。昨天一切正常,但今天不...