【发布时间】:2016-08-01 20:28:36
【问题描述】:
我们正在从 AMQP 迁移到 Google 的 Pubsub。
The docs suggest 拉取可能是我们的最佳选择,因为我们正在使用计算引擎并且无法打开我们的工作人员以通过推送服务接收。
它还说,根据使用情况,拉动可能会产生额外的费用:
如果使用轮询,如果您是 频繁打开连接并立即关闭它们。
我们在 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 示例。
【问题讨论】:
标签: go google-compute-engine google-cloud-pubsub