我们正在从 AMQP 迁移到 Google 的 Pubsub。
文档表明pull 可能是我们的最佳选择,因为我们正在使用计算引擎并且无法打开我们的工作人员以通过推送服务接收。
它还表示拉动可能会根据使用情况产生额外费用:
如果使用轮询,如果您频繁打开连接并立即关闭它们,可能会导致高网络使用率。
我们在 go 中创建了一个测试订阅者,它在循环中运行,如下所示:
func main() {
jsonKey, err := ioutil.ReadFile("pubsub-key.json")
if err != nil {
log.Fatal(err)
}
conf, err := google.JWTConfigFromJSON(
jsonKey,
pubsub.ScopeCloudPlatform,
pubsub.ScopePubSub,
)
if err != nil {
log.Fatal(err)
}
ctx := cloud.NewContext("xxx", conf.Client(oauth2.NoContext))
msgIDs, err := pubsub.Publish(ctx, "topic1", &pubsub.Message{
Data: []byte("hello world"),
})
if err != nil {
log.Println(err)
}
log.Printf("Published a message with a message id: %s\n", msgIDs[0])
for {
msgs, err := pubsub.Pull(ctx, "subscription1", 1)
if err != nil {
log.Println(err)
}
if len(msgs) > 0 {
log.Printf("New message arrived: %v, len: %d\n", msgs[0].ID, len(msgs))
if err := pubsub.Ack(ctx, "subscription1", msgs[0].AckID); err != nil {
log.Fatal(err)
}
log.Println("Acknowledged message")
log.Printf("Message: %s", msgs[0].Data)
}
}
}
不过,我的问题实际上是这是否是提取消息的正确/推荐方式。
我们全天每秒收到大约 100 条消息。我不确定在无限循环中运行它是否会让我们破产并且找不到任何其他像样的 go 示例。
慕姐8265434
相关分类