| // 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 ( |
| "fmt" |
| "time" |
| |
| "cloud.google.com/go/pubsub" |
| "golang.org/x/net/context" |
| "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. |
| } |
| |
| // 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, |
| }) |
| 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 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"}, |
| }) |
| 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 |