| // Copyright 2014 Google LLC |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| package pubsub_test |
| |
| import ( |
| "context" |
| "fmt" |
| "time" |
| |
| "cloud.google.com/go/pubsub" |
| "google.golang.org/api/iterator" |
| ) |
| |
| func ExampleNewClient() { |
| ctx := context.Background() |
| _, err := pubsub.NewClient(ctx, "project-id") |
| if err != nil { |
| // TODO: Handle error. |
| } |
| |
| // See the other examples to learn how to use the Client. |
| } |
| |
| func ExampleClient_CreateTopic() { |
| ctx := context.Background() |
| client, err := pubsub.NewClient(ctx, "project-id") |
| if err != nil { |
| // TODO: Handle error. |
| } |
| |
| // Create a new topic with the given name. |
| topic, err := client.CreateTopic(ctx, "topicName") |
| if err != nil { |
| // TODO: Handle error. |
| } |
| |
| _ = topic // TODO: use the topic. |
| } |
| |
| func ExampleClient_CreateTopicWithConfig() { |
| ctx := context.Background() |
| client, err := pubsub.NewClient(ctx, "project-id") |
| if err != nil { |
| // TODO: Handle error. |
| } |
| |
| // Create a new topic with the given name and config. |
| topicConfig := &pubsub.TopicConfig{ |
| KMSKeyName: "projects/project-id/locations/global/keyRings/my-key-ring/cryptoKeys/my-key", |
| MessageStoragePolicy: pubsub.MessageStoragePolicy{ |
| AllowedPersistenceRegions: []string{"us-east1"}, |
| }, |
| } |
| topic, err := client.CreateTopicWithConfig(ctx, "topicName", topicConfig) |
| if err != nil { |
| // TODO: Handle error. |
| } |
| _ = topic // TODO: use the topic. |
| } |
| |
| // Use TopicInProject to refer to a topic that is not in the client's project, such |
| // as a public topic. |
| func ExampleClient_TopicInProject() { |
| ctx := context.Background() |
| client, err := pubsub.NewClient(ctx, "project-id") |
| if err != nil { |
| // TODO: Handle error. |
| } |
| topic := client.TopicInProject("topicName", "another-project-id") |
| _ = topic // TODO: use the topic. |
| } |
| |
| func ExampleClient_CreateSubscription() { |
| ctx := context.Background() |
| client, err := pubsub.NewClient(ctx, "project-id") |
| if err != nil { |
| // TODO: Handle error. |
| } |
| |
| // Create a new topic with the given name. |
| topic, err := client.CreateTopic(ctx, "topicName") |
| if err != nil { |
| // TODO: Handle error. |
| } |
| |
| // Create a new subscription to the previously created topic |
| // with the given name. |
| sub, err := client.CreateSubscription(ctx, "subName", pubsub.SubscriptionConfig{ |
| Topic: topic, |
| AckDeadline: 10 * time.Second, |
| ExpirationPolicy: 25 * time.Hour, |
| }) |
| if err != nil { |
| // TODO: Handle error. |
| } |
| |
| _ = sub // TODO: use the subscription. |
| } |
| |
| func ExampleClient_CreateSubscription_neverExpire() { |
| ctx := context.Background() |
| client, err := pubsub.NewClient(ctx, "project-id") |
| if err != nil { |
| // TODO: Handle error. |
| } |
| |
| // Create a new topic with the given name. |
| topic, err := client.CreateTopic(ctx, "topicName") |
| if err != nil { |
| // TODO: Handle error. |
| } |
| |
| // Create a new subscription to the previously |
| // created topic and ensure it never expires. |
| sub, err := client.CreateSubscription(ctx, "subName", pubsub.SubscriptionConfig{ |
| Topic: topic, |
| AckDeadline: 10 * time.Second, |
| ExpirationPolicy: time.Duration(0), |
| }) |
| if err != nil { |
| // TODO: Handle error. |
| } |
| _ = sub // TODO: Use the subscription |
| } |
| |
| func ExampleTopic_Delete() { |
| ctx := context.Background() |
| client, err := pubsub.NewClient(ctx, "project-id") |
| if err != nil { |
| // TODO: Handle error. |
| } |
| |
| topic := client.Topic("topicName") |
| if err := topic.Delete(ctx); err != nil { |
| // TODO: Handle error. |
| } |
| } |
| |
| func ExampleTopic_Exists() { |
| ctx := context.Background() |
| client, err := pubsub.NewClient(ctx, "project-id") |
| if err != nil { |
| // TODO: Handle error. |
| } |
| |
| topic := client.Topic("topicName") |
| ok, err := topic.Exists(ctx) |
| if err != nil { |
| // TODO: Handle error. |
| } |
| if !ok { |
| // Topic doesn't exist. |
| } |
| } |
| |
| func ExampleTopic_Publish() { |
| ctx := context.Background() |
| client, err := pubsub.NewClient(ctx, "project-id") |
| if err != nil { |
| // TODO: Handle error. |
| } |
| |
| topic := client.Topic("topicName") |
| defer topic.Stop() |
| var results []*pubsub.PublishResult |
| r := topic.Publish(ctx, &pubsub.Message{ |
| Data: []byte("hello world"), |
| }) |
| results = append(results, r) |
| // Do other work ... |
| for _, r := range results { |
| id, err := r.Get(ctx) |
| if err != nil { |
| // TODO: Handle error. |
| } |
| fmt.Printf("Published a message with a message ID: %s\n", id) |
| } |
| } |
| |
| func ExampleTopic_Subscriptions() { |
| ctx := context.Background() |
| client, err := pubsub.NewClient(ctx, "project-id") |
| if err != nil { |
| // TODO: Handle error. |
| } |
| topic := client.Topic("topic-name") |
| // List all subscriptions of the topic (maybe of multiple projects). |
| for subs := topic.Subscriptions(ctx); ; { |
| sub, err := subs.Next() |
| if err == iterator.Done { |
| break |
| } |
| if err != nil { |
| // TODO: Handle error. |
| } |
| _ = sub // TODO: use the subscription. |
| } |
| } |
| |
| func ExampleTopic_Update() { |
| ctx := context.Background() |
| client, err := pubsub.NewClient(ctx, "project-id") |
| if err != nil { |
| // TODO: Handle error.V |
| } |
| topic := client.Topic("topic-name") |
| topicConfig, err := topic.Update(ctx, pubsub.TopicConfigToUpdate{ |
| MessageStoragePolicy: &pubsub.MessageStoragePolicy{ |
| AllowedPersistenceRegions: []string{ |
| "asia-east1", "asia-northeast1", "asia-southeast1", "australia-southeast1", |
| "europe-north1", "europe-west1", "europe-west2", "europe-west3", "europe-west4", |
| "us-central1", "us-central2", "us-east1", "us-east4", "us-west1", "us-west2"}, |
| }, |
| }) |
| if err != nil { |
| // TODO: Handle error. |
| } |
| _ = topicConfig // TODO: Use TopicConfig |
| } |
| |
| func ExampleTopic_Update_resetMessageStoragePolicy() { |
| ctx := context.Background() |
| client, err := pubsub.NewClient(ctx, "project-id") |
| if err != nil { |
| // TODO: Handle error.V |
| } |
| topic := client.Topic("topic-name") |
| topicConfig, err := topic.Update(ctx, pubsub.TopicConfigToUpdate{ |
| // Just use a non-nil MessageStoragePolicy without any fields. |
| MessageStoragePolicy: &pubsub.MessageStoragePolicy{}, |
| }) |
| if err != nil { |
| // TODO: Handle error. |
| } |
| _ = topicConfig // TODO: Use TopicConfig |
| } |
| |
| func ExampleSubscription_Delete() { |
| ctx := context.Background() |
| client, err := pubsub.NewClient(ctx, "project-id") |
| if err != nil { |
| // TODO: Handle error. |
| } |
| |
| sub := client.Subscription("subName") |
| if err := sub.Delete(ctx); err != nil { |
| // TODO: Handle error. |
| } |
| } |
| |
| func ExampleSubscription_Exists() { |
| ctx := context.Background() |
| client, err := pubsub.NewClient(ctx, "project-id") |
| if err != nil { |
| // TODO: Handle error. |
| } |
| |
| sub := client.Subscription("subName") |
| ok, err := sub.Exists(ctx) |
| if err != nil { |
| // TODO: Handle error. |
| } |
| if !ok { |
| // Subscription doesn't exist. |
| } |
| } |
| |
| func ExampleSubscription_Config() { |
| ctx := context.Background() |
| client, err := pubsub.NewClient(ctx, "project-id") |
| if err != nil { |
| // TODO: Handle error. |
| } |
| sub := client.Subscription("subName") |
| config, err := sub.Config(ctx) |
| if err != nil { |
| // TODO: Handle error. |
| } |
| fmt.Println(config) |
| } |
| |
| func ExampleSubscription_Receive() { |
| ctx := context.Background() |
| client, err := pubsub.NewClient(ctx, "project-id") |
| if err != nil { |
| // TODO: Handle error. |
| } |
| sub := client.Subscription("subName") |
| err = sub.Receive(ctx, func(ctx context.Context, m *pubsub.Message) { |
| // TODO: Handle message. |
| // NOTE: May be called concurrently; synchronize access to shared memory. |
| m.Ack() |
| }) |
| if err != context.Canceled { |
| // TODO: Handle error. |
| } |
| } |
| |
| // This example shows how to configure keepalive so that unacknoweldged messages |
| // expire quickly, allowing other subscribers to take them. |
| func ExampleSubscription_Receive_maxExtension() { |
| ctx := context.Background() |
| client, err := pubsub.NewClient(ctx, "project-id") |
| if err != nil { |
| // TODO: Handle error. |
| } |
| sub := client.Subscription("subName") |
| // This program is expected to process and acknowledge messages in 30 seconds. If |
| // not, the Pub/Sub API will assume the message is not acknowledged. |
| sub.ReceiveSettings.MaxExtension = 30 * time.Second |
| err = sub.Receive(ctx, func(ctx context.Context, m *pubsub.Message) { |
| // TODO: Handle message. |
| m.Ack() |
| }) |
| if err != context.Canceled { |
| // TODO: Handle error. |
| } |
| } |
| |
| // This example shows how to throttle Subscription.Receive, which aims for high |
| // throughput by default. By limiting the number of messages and/or bytes being |
| // processed at once, you can bound your program's resource consumption. |
| func ExampleSubscription_Receive_maxOutstanding() { |
| ctx := context.Background() |
| client, err := pubsub.NewClient(ctx, "project-id") |
| if err != nil { |
| // TODO: Handle error. |
| } |
| sub := client.Subscription("subName") |
| sub.ReceiveSettings.MaxOutstandingMessages = 5 |
| sub.ReceiveSettings.MaxOutstandingBytes = 10e6 |
| err = sub.Receive(ctx, func(ctx context.Context, m *pubsub.Message) { |
| // TODO: Handle message. |
| m.Ack() |
| }) |
| if err != context.Canceled { |
| // TODO: Handle error. |
| } |
| } |
| |
| func ExampleSubscription_Update() { |
| ctx := context.Background() |
| client, err := pubsub.NewClient(ctx, "project-id") |
| if err != nil { |
| // TODO: Handle error. |
| } |
| sub := client.Subscription("subName") |
| subConfig, err := sub.Update(ctx, pubsub.SubscriptionConfigToUpdate{ |
| PushConfig: &pubsub.PushConfig{Endpoint: "https://example.com/push"}, |
| // Make the subscription never expire. |
| ExpirationPolicy: time.Duration(0), |
| }) |
| if err != nil { |
| // TODO: Handle error. |
| } |
| _ = subConfig // TODO: Use SubscriptionConfig. |
| } |
| |
| func ExampleSubscription_Update_pushConfigAuthenticationMethod() { |
| ctx := context.Background() |
| client, err := pubsub.NewClient(ctx, "project-id") |
| if err != nil { |
| // TODO: Handle error. |
| } |
| sub := client.Subscription("subName") |
| subConfig, err := sub.Update(ctx, pubsub.SubscriptionConfigToUpdate{ |
| PushConfig: &pubsub.PushConfig{ |
| Endpoint: "https://example.com/push", |
| AuthenticationMethod: &pubsub.OIDCToken{ |
| ServiceAccountEmail: "service-account-email", |
| Audience: "client-12345", |
| }, |
| }, |
| }) |
| if err != nil { |
| // TODO: Handle error. |
| } |
| _ = subConfig // TODO: Use SubscriptionConfig. |
| } |
| |
| func ExampleSubscription_CreateSnapshot() { |
| ctx := context.Background() |
| client, err := pubsub.NewClient(ctx, "project-id") |
| if err != nil { |
| // TODO: Handle error. |
| } |
| sub := client.Subscription("subName") |
| snapConfig, err := sub.CreateSnapshot(ctx, "snapshotName") |
| if err != nil { |
| // TODO: Handle error. |
| } |
| _ = snapConfig // TODO: Use SnapshotConfig. |
| } |
| |
| func ExampleSubscription_SeekToSnapshot() { |
| ctx := context.Background() |
| client, err := pubsub.NewClient(ctx, "project-id") |
| if err != nil { |
| // TODO: Handle error. |
| } |
| sub := client.Subscription("subName") |
| snap := client.Snapshot("snapshotName") |
| if err := sub.SeekToSnapshot(ctx, snap); err != nil { |
| // TODO: Handle error. |
| } |
| } |
| |
| func ExampleSubscription_SeekToTime() { |
| ctx := context.Background() |
| client, err := pubsub.NewClient(ctx, "project-id") |
| if err != nil { |
| // TODO: Handle error. |
| } |
| sub := client.Subscription("subName") |
| if err := sub.SeekToTime(ctx, time.Now().Add(-time.Hour)); err != nil { |
| // TODO: Handle error. |
| } |
| } |
| |
| func ExampleSnapshot_Delete() { |
| ctx := context.Background() |
| client, err := pubsub.NewClient(ctx, "project-id") |
| if err != nil { |
| // TODO: Handle error. |
| } |
| |
| snap := client.Snapshot("snapshotName") |
| if err := snap.Delete(ctx); err != nil { |
| // TODO: Handle error. |
| } |
| } |
| |
| func ExampleClient_Snapshots() { |
| ctx := context.Background() |
| client, err := pubsub.NewClient(ctx, "project-id") |
| if err != nil { |
| // TODO: Handle error. |
| } |
| // List all snapshots for the project. |
| iter := client.Snapshots(ctx) |
| _ = iter // TODO: iterate using Next. |
| } |
| |
| func ExampleSnapshotConfigIterator_Next() { |
| ctx := context.Background() |
| client, err := pubsub.NewClient(ctx, "project-id") |
| if err != nil { |
| // TODO: Handle error. |
| } |
| // List all snapshots for the project. |
| iter := client.Snapshots(ctx) |
| for { |
| snapConfig, err := iter.Next() |
| if err == iterator.Done { |
| break |
| } |
| if err != nil { |
| // TODO: Handle error. |
| } |
| _ = snapConfig // TODO: use the SnapshotConfig. |
| } |
| } |
| |
| // TODO(jba): write an example for PublishResult.Ready |
| // TODO(jba): write an example for Subscription.IAM |
| // TODO(jba): write an example for Topic.IAM |
| // TODO(jba): write an example for Topic.Stop |