【发布时间】:2021-03-16 02:53:30
【问题描述】:
使用google云平台实现pubsub模型,使用函数创建topic、subscriber、publish和pullmsg函数。
func pullMsgs(projectID, subID string, jsonPath string) error {
ctx := context.Background()
client, err := pubsub.NewClient(ctx, projectID, option.WithCredentialsFile(jsonPath))
if err != nil {
return fmt.Errorf("pubsub.NewClient: %v", err)
}
// Consume 10 messages.
var mu sync.Mutex
received := 0
sub := client.Subscription(subID)
cctx, cancel := context.WithCancel(ctx)
err = sub.Receive(cctx, func(ctx context.Context, msg *pubsub.Message) {
mu.Lock()
defer mu.Unlock()
// fmt.Fprintf(w, "Got message: %q\n", string(msg.Data))
fmt.Println("Got message: n", string(msg.Data))
msg.Ack()
received++
if received == 10 {
cancel()
}
})
if err != nil {
return fmt.Errorf("Receive: %v", err)
}
return nil
}
pullmsg 函数使用订阅 ID 从发布者获取发布的消息。 假设该模型有 3 个特定主题的订阅者。如果发布者为该主题发布消息。 pullmsg 函数必须执行 3 次才能为所有订阅者获取该消息。 有没有什么方法可以一次将发布的消息发送给所有订阅者。
【问题讨论】:
-
按照设计,每个订阅(以及每个订阅者)都会收到同一消息的不同副本。您能否澄清这 3 个订阅者是否处于同一进程中?如果是这样,是否有 1 个订阅者不够的原因?
标签: go google-cloud-platform publish-subscribe google-cloud-pubsub