func deleteSubscription(client *pubsub.Client, argv []string) { checkArgs(argv, 2) sub := argv[1] err := client.Subscription(sub).Delete(context.Background()) if err != nil { log.Fatalf("Deleting Subscription failed: %v", err) } fmt.Printf("Subscription %s was deleted.\n", sub) }
func checkSubscriptionExists(client *pubsub.Client, argv []string) { checkArgs(argv, 1) sub := argv[1] exists, err := client.Subscription(sub).Exists(context.Background()) if err != nil { log.Fatalf("Checking subscription exists failed: %v", err) } fmt.Println(exists) }
func showSubscription(client *pubsub.Client, argv []string) { checkArgs(argv, 2) sub := argv[1] conf, err := client.Subscription(sub).Config(context.Background()) if err != nil { log.Fatalf("Getting Subscription failed: %v", err) } fmt.Printf("%+v\n", conf) exists, err := conf.Topic.Exists(context.Background()) if err != nil { log.Fatalf("Checking whether topic exists: %v", err) } if !exists { fmt.Println("The topic for this subscription has been deleted.") } }
// pullMessages reads messages from a subscription, and farms them out to a // number of goroutines for processing. func pullMessages(client *pubsub.Client, argv []string) { checkArgs(argv, 3) sub := client.Subscription(argv[1]) workers, err := strconv.Atoi(argv[2]) if err != nil { log.Fatalf("Atoi failed, %v", err) } rep := newReporter("Received") defer rep.Stop() msgs := make(chan *pubsub.Message) for i := 0; i < int(workers); i++ { go processMessages(msgs, rep, !*reportMPS) } it, err := sub.Pull(context.Background(), pubsub.MaxExtension(time.Minute)) if err != nil { log.Fatalf("failed to construct iterator: %v", err) } defer it.Stop() for !shouldQuit() { m, err := it.Next() if err != nil { log.Fatalf("error reading from iterator: %v", err) } msgs <- m } // Shut down all processMessages goroutines. close(msgs) // The deferred call to it.Stop will block until each m.Done has been // called on each message. }
// Configure connection to pubsub ctx := context.Background() var psClient *pubsub.Client if KeyPath != "" { psClient = JWTClientInit(&ctx) } else { psClient = GCEClientInit(&ctx, Gceproject) } if psClient == nil { log.Errorf("PubSub client is nil") os.Exit(1) } log.Debugf("client: %#v", psClient) // Create message iterator from client sub := psClient.Subscription(subscription) it, err := sub.Pull(ctx, pubsub.MaxExtension(time.Minute*1)) if err != nil { log.Errorf("error creating pubsub iterator: %v", err) } defer it.Stop() msgs := make(chan *pubsub.Message) go func() { for !shouldQuit(quit) { m, err := it.Next() if err != nil { switch err { case pubsub.Done: log.Infof("pubsub interator finished") default: