Go 如何使用GCP在pubsub模型中一次向所有订阅者发送消息

Go 如何使用GCP在pubsub模型中一次向所有订阅者发送消息,go,google-cloud-platform,publish-subscribe,google-cloud-pubsub,Go,Google Cloud Platform,Publish Subscribe,Google Cloud Pubsub,使用谷歌云平台实现pubsub模型,使用函数创建主题、订户、发布和pullmsg函数 func pullMsgs(projectID, subID string, jsonPath string) error { ctx := context.Background() client, err := pubsub.NewClient(ctx, projectID, option.WithCredentialsFile(jsonPath)) if err != nil {

使用谷歌云平台实现pubsub模型,使用函数创建主题、订户、发布和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个订阅者获取消息。因为这些信息可能不会同时到达。因此,如果要合并这些消息,代码必须等到收到所有消息。这并不是Pub/Sub的真正目的。另一方面,如果您不想合并这三条消息,我建议您为每个订阅创建一段单独的代码

也就是说,您可以使用同步拉取机制或异步拉取机制来拉取所有消息。如果您不希望代码被阻塞,以便它基本上同时侦听所有订阅,那么可以使用异步拉取

代码流可以是:

  • 创建一个非阻塞订户函数
  • 当x条消息到达时,让此pull函数停止(中断while循环)
  • 创建传递三个主题ID的函数的三个实例
  • 为您的处理创建另一个函数

可以找到更多信息。

我不明白您为什么要一次从3个订阅中提取。因为这些信息可能不会同时到达。因此,如果要合并这些消息,代码必须等到收到所有消息。这并不是Pub/Sub的真正目的。另一方面,如果您不想合并这三条消息,我建议您为每个订阅创建一段单独的代码

也就是说,您可以使用同步拉取机制或异步拉取机制来拉取所有消息。如果您不希望代码被阻塞,以便它基本上同时侦听所有订阅,那么可以使用异步拉取

代码流可以是:

  • 创建一个非阻塞订户函数
  • 当x条消息到达时,让此pull函数停止(中断while循环)
  • 创建传递三个主题ID的函数的三个实例
  • 为您的处理创建另一个函数
可以找到更多信息。

根据设计,每个订阅(以及每个订户)将收到同一消息的不同副本。你能澄清一下这3个订阅者是否在同一个过程中吗?如果是,是否有一个订阅者不够的原因?根据设计,每个订阅者(因此每个订阅者)将收到同一消息的不同副本。你能澄清一下这3个订阅者是否在同一个过程中吗?如果是,是否有一名认购人不够的原因?