管理主題和訂閱項目

本文提供資訊說明如何建立、刪除及管理 Cloud Pub/Sub 主題和訂閱。如要進一步瞭解如何發布及存取訊息資料,請參閱發布者指南訂閱者總覽

管理主題

您可以使用 API、GCP 主控台或 gcloud 指令列工具建立、刪除及查看主題。請參閱 gcloud pubsub 參考資料,取得 Cloud Pub/Sub API gcloud 指令的完整清單。

如要瞭解 GCP 主控台,請參閱 GCP 主控台快速入門導覽課程

建立主題

您必須先建立主題,然後才能發布或訂閱該主題。 以下範例說明如何建立主題:

通訊協定

要求:

PUT https://pubsub.googleapis.com/v1/projects/myproject/topics/mytopic

回應:

200 OK
{
 "name": "projects/myproject/topics/mytopic"
}

指令列

  gcloud pubsub topics create myTopic

C#

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 C# 設定說明進行操作。詳情請參閱 Cloud Pub/Sub C# API 參考說明文件

            PublisherServiceApiClient publisher = PublisherServiceApiClient.Create();

            TopicName topicName = new TopicName(projectId, topicId);
            try
            {
                publisher.CreateTopic(topicName);
            }
            catch (RpcException e)
            when (e.Status.StatusCode == StatusCode.AlreadyExists)
            {
                // Already exists.  That's fine.
            }

Go

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Go 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Go API 參考說明文件

t, err := client.CreateTopic(ctx, topic)
if err != nil {
	return err
}
fmt.Printf("Topic created: %v\n", t)

Java

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Java 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Java API 參考說明文件

try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
  // projectId <=  unique project identifier, eg. "my-project-id"
  // topicId <= "my-topic-id"
  ProjectTopicName topicName = ProjectTopicName.of(projectId, topicId);
  Topic topic = topicAdminClient.createTopic(topicName);
  return topic;
}

Node.js

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Node.js 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Node.js API 參考說明文件

// Imports the Google Cloud client library
const {PubSub} = require('@google-cloud/pubsub');

// Creates a client
const pubsub = new PubSub();

/**
 * TODO(developer): Uncomment the following line to run the sample.
 */
// const topicName = 'my-topic';

// Creates a new topic
await pubsub.createTopic(topicName);
console.log(`Topic ${topicName} created.`);

PHP

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 PHP 設定說明進行操作。詳情請參閱 Cloud Pub/Sub PHP API 參考說明文件

use Google\Cloud\PubSub\PubSubClient;

/**
 * Creates a Pub/Sub topic.
 *
 * @param string $projectId  The Google project ID.
 * @param string $topicName  The Pub/Sub topic name.
 */
function create_topic($projectId, $topicName)
{
    $pubsub = new PubSubClient([
        'projectId' => $projectId,
    ]);
    $topic = $pubsub->createTopic($topicName);

    printf('Topic created: %s' . PHP_EOL, $topic->name());
}

Python

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Python 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Python API 參考說明文件

from google.cloud import pubsub_v1

# TODO project_id = "Your Google Cloud Project ID"
# TODO topic_name = "Your Pub/Sub topic name"

publisher = pubsub_v1.PublisherClient()
topic_path = publisher.topic_path(project_id, topic_name)

topic = publisher.create_topic(topic_path)

print('Topic created: {}'.format(topic))

Ruby

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Ruby 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Ruby API 參考說明文件

# project_id = "Your Google Cloud Project ID"
# topic_name = "Your Pubsub topic name"
require "google/cloud/pubsub"

pubsub = Google::Cloud::Pubsub.new project: project_id

topic  = pubsub.create_topic topic_name

puts "Topic #{topic.name} created."

刪除主題

以下範例說明如何刪除主題:

通訊協定

要求:

DELETE https://pubsub.googleapis.com/v1/projects/myproject/topics/mytopic

回應:

200 OK
{
 "name": "projects/myproject/topics/mytopic"
}

GCLOUD 指令

  gcloud pubsub topics delete myTopic

C#

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 C# 設定說明進行操作。詳情請參閱 Cloud Pub/Sub C# API 參考說明文件

PublisherServiceApiClient publisher = PublisherServiceApiClient.Create();
TopicName topicName = new TopicName(projectId, topicId);
publisher.DeleteTopic(topicName);
Console.WriteLine("Topic deleted.");

Go

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Go 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Go API 參考說明文件

t := client.Topic(topic)
if err := t.Delete(ctx); err != nil {
	return err
}
fmt.Printf("Deleted topic: %v\n", t)

Java

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Java 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Java API 參考說明文件

try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
  ProjectTopicName topicName = ProjectTopicName.of(projectId, topicId);
  topicAdminClient.deleteTopic(topicName);
  return topicName;
}

Node.js

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Node.js 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Node.js API 參考說明文件

// Imports the Google Cloud client library
const {PubSub} = require('@google-cloud/pubsub');

// Creates a client
const pubsub = new PubSub();

/**
 * TODO(developer): Uncomment the following line to run the sample.
 */
// const topicName = 'my-topic';

// Deletes the topic
await pubsub.topic(topicName).delete();
console.log(`Topic ${topicName} deleted.`);

PHP

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 PHP 設定說明進行操作。詳情請參閱 Cloud Pub/Sub PHP API 參考說明文件

use Google\Cloud\PubSub\PubSubClient;

/**
 * Creates a Pub/Sub topic.
 *
 * @param string $projectId  The Google project ID.
 * @param string $topicName  The Pub/Sub topic name.
 */
function delete_topic($projectId, $topicName)
{
    $pubsub = new PubSubClient([
        'projectId' => $projectId,
    ]);
    $topic = $pubsub->topic($topicName);
    $topic->delete();

    printf('Topic deleted: %s' . PHP_EOL, $topic->name());
}

Python

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Python 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Python API 參考說明文件

from google.cloud import pubsub_v1

# TODO project_id = "Your Google Cloud Project ID"
# TODO topic_name = "Your Pub/Sub topic name"

publisher = pubsub_v1.PublisherClient()
topic_path = publisher.topic_path(project_id, topic_name)

publisher.delete_topic(topic_path)

print('Topic deleted: {}'.format(topic_path))

Ruby

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Ruby 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Ruby API 參考說明文件

# project_id = "Your Google Cloud Project ID"
# topic_name = "Your Pubsub topic name"
require "google/cloud/pubsub"

pubsub = Google::Cloud::Pubsub.new project: project_id

topic = pubsub.topic topic_name
topic.delete

puts "Topic #{topic_name} deleted."

刪除主題並不會一併刪除主題下的訂閱項目,且訂閱者可以取得訂閱項目的待處理訊息。刪除主題之後,其訂閱項目的主題名稱即會變為 _deleted-topic_。如果您在刪除主題後的一段時間內,使用該主題的名稱建立新的主題,則可能會發生錯誤。

列出主題

以下範例說明如何取得主題清單:

通訊協定

要求:

GET https://pubsub.googleapis.com/v1/projects/myproject/topics

回應:

200 OK
{
  "topics": [
    {
      "name": "projects/myproject/topics/mytopic1"
    },
    {
      "name": "projects/myproject/topics/mytopic2"
    }
  ]
}

GCLOUD 指令

   gcloud pubsub topics list

C#

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 C# 設定說明進行操作。詳情請參閱 Cloud Pub/Sub C# API 參考說明文件

ProjectName projectName = new ProjectName(projectId);
IEnumerable<Topic> topics = publisher.ListTopics(projectName);
foreach (Topic topic in topics)
{
    Console.WriteLine($"{topic.Name}");
}

Go

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Go 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Go API 參考說明文件

var topics []*pubsub.Topic

it := client.Topics(ctx)
for {
	topic, err := it.Next()
	if err == iterator.Done {
		break
	}
	if err != nil {
		return nil, err
	}
	topics = append(topics, topic)
}

return topics, nil

Java

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Java 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Java API 參考說明文件

try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
  ListTopicsRequest listTopicsRequest =
      ListTopicsRequest.newBuilder().setProject(ProjectName.format(projectId)).build();
  ListTopicsPagedResponse response = topicAdminClient.listTopics(listTopicsRequest);
  Iterable<Topic> topics = response.iterateAll();
  for (Topic topic : topics) {
    // do something with the topic
  }
  return response;
}

Node.js

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Node.js 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Node.js API 參考說明文件

// Imports the Google Cloud client library
const {PubSub} = require('@google-cloud/pubsub');

// Creates a client
const pubsub = new PubSub();

// Lists all topics in the current project
const [topics] = await pubsub.getTopics();
console.log('Topics:');
topics.forEach(topic => console.log(topic.name));

PHP

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 PHP 設定說明進行操作。詳情請參閱 Cloud Pub/Sub PHP API 參考說明文件

use Google\Cloud\PubSub\PubSubClient;

/**
 * Lists all Pub/Sub topics.
 *
 * @param string $projectId  The Google project ID.
 */
function list_topics($projectId)
{
    $pubsub = new PubSubClient([
        'projectId' => $projectId,
    ]);
    foreach ($pubsub->topics() as $topic) {
        printf('Topic: %s' . PHP_EOL, $topic->name());
    }
}

Python

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Python 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Python API 參考說明文件

from google.cloud import pubsub_v1

# TODO project_id = "Your Google Cloud Project ID"

publisher = pubsub_v1.PublisherClient()
project_path = publisher.project_path(project_id)

for topic in publisher.list_topics(project_path):
    print(topic)

Ruby

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Ruby 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Ruby API 參考說明文件

# project_id = "Your Google Cloud Project ID"
require "google/cloud/pubsub"

pubsub = Google::Cloud::Pubsub.new project: project_id

topics = pubsub.topics

puts "Topics in project:"
topics.each do |topic|
  puts topic.name
end
根據預設,每個查詢會傳回最多 100 個結果。 您可以使用頁面大小參數,指定最高為 1,000 的替代值。

管理訂閱項目

本節說明如何管理推送及提取訂閱項目。如需提取和推送訂閱項目總覽及兩者的比較情形,請參閱訂閱者總覽

您必須為主題建立訂閱項目,訂閱者才能接收發布至主題的訊息。

如需訂閱者指令,另請參閱 gcloud 參考資料

訂閱具有多項屬性,可於建立時設定或於之後更新,其中包括:

  • 傳送方法:根據預設,Cloud Pub/Sub 訂閱項目使用提取方法。您可以指定非空白的有效 HTTPS 推送端點 URL 切換至推送傳送,也可以指定空白 URL 切換回提取傳送。

  • 確認期限:如果您的程式碼沒有在期限前確認訊息,系統就會再次傳送訊息。預設是 10 秒。您可以指定的最長自訂期限為 600 秒 (10 分鐘)。

通訊協定

要求:

PUT https://pubsub.googleapis.com/v1/projects/myproject/subscriptions/mysubscription
{
  "topic": "projects/someproject/topics/sometopic"
  // Only needed if you are using push delivery
  "pushConfig": {
    "pushEndpoint": "https://myproject.appspot.com/myhandler"
  }
}

回應:

200 OK
{
  "name": "projects/myproject/subscriptions/mysubscription",
  "topic": "projects/someproject/topics/sometopic",
  "pushConfig": {
    "pushEndpoint": "https://myproject.appspot.com/myhandler"
  },
  "ackDeadlineSeconds": 10
}

GCLOUD 指令

   gcloud pubsub subscriptions create mySubscription --topic myTopic

C#

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 C# 設定說明進行操作。詳情請參閱 Cloud Pub/Sub C# API 參考說明文件

SubscriberServiceApiClient subscriber = SubscriberServiceApiClient.Create();
TopicName topicName = new TopicName(projectId, topicId);
SubscriptionName subscriptionName = new SubscriptionName(projectId,
    subscriptionId);
try
{
    Subscription subscription = subscriber.CreateSubscription(
        subscriptionName, topicName, pushConfig: null,
        ackDeadlineSeconds: 60);
}
catch (RpcException e)
when (e.Status.StatusCode == StatusCode.AlreadyExists)
{
    // Already exists.  That's fine.
}

Go

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Go 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Go API 參考說明文件

sub, err := client.CreateSubscription(ctx, subName, pubsub.SubscriptionConfig{
	Topic:       topic,
	AckDeadline: 20 * time.Second,
})
if err != nil {
	return err
}
fmt.Printf("Created subscription: %v\n", sub)

Java

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Java 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Java API 參考說明文件

try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
  // eg. projectId = "my-test-project", topicId = "my-test-topic"
  ProjectTopicName topicName = ProjectTopicName.of(projectId, topicId);
  // eg. subscriptionId = "my-test-subscription"
  ProjectSubscriptionName subscriptionName =
      ProjectSubscriptionName.of(projectId, subscriptionId);
  // create a pull subscription with default acknowledgement deadline
  Subscription subscription =
      subscriptionAdminClient.createSubscription(
          subscriptionName, topicName, PushConfig.getDefaultInstance(), 0);
  return subscription;
}

Node.js

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Node.js 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Node.js API 參考說明文件

// Imports the Google Cloud client library
const {PubSub} = require('@google-cloud/pubsub');

// Creates a client
const pubsub = new PubSub();

/**
 * TODO(developer): Uncomment the following lines to run the sample.
 */
// const topicName = 'my-topic';
// const subscriptionName = 'my-sub';

// Creates a new subscription
await pubsub.topic(topicName).createSubscription(subscriptionName);
console.log(`Subscription ${subscriptionName} created.`);

PHP

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 PHP 設定說明進行操作。詳情請參閱 Cloud Pub/Sub PHP API 參考說明文件

use Google\Cloud\PubSub\PubSubClient;

/**
 * Creates a Pub/Sub subscription.
 *
 * @param string $projectId  The Google project ID.
 * @param string $topicName  The Pub/Sub topic name.
 * @param string $subscriptionName  The Pub/Sub subscription name.
 */
function create_subscription($projectId, $topicName, $subscriptionName)
{
    $pubsub = new PubSubClient([
        'projectId' => $projectId,
    ]);
    $topic = $pubsub->topic($topicName);
    $subscription = $topic->subscription($subscriptionName);
    $subscription->create();

    printf('Subscription created: %s' . PHP_EOL, $subscription->name());
}

Python

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Python 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Python API 參考說明文件

from google.cloud import pubsub_v1

# TODO project_id = "Your Google Cloud Project ID"
# TODO topic_name = "Your Pub/Sub topic name"
# TODO subscription_name = "Your Pub/Sub subscription name"

subscriber = pubsub_v1.SubscriberClient()
topic_path = subscriber.topic_path(project_id, topic_name)
subscription_path = subscriber.subscription_path(
    project_id, subscription_name)

subscription = subscriber.create_subscription(
    subscription_path, topic_path)

print('Subscription created: {}'.format(subscription))

Ruby

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Ruby 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Ruby API 參考說明文件

# project_id        = "Your Google Cloud Project ID"
# topic_name        = "Your Pubsub topic name"
# subscription_name = "Your Pubsub subscription name"
require "google/cloud/pubsub"

pubsub = Google::Cloud::Pubsub.new project: project_id

topic        = pubsub.topic topic_name
subscription = topic.subscribe subscription_name

puts "Pull subscription #{subscription_name} created."

您可以提供 HTTP 端點網址來建立推送訂閱項目,如下列範例所示:

GCLOUD 指令

   gcloud pubsub subscriptions create mySubscription --topic myTopic --push-endpoint="https://myapp.appspot.com/push"

Go

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Go 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Go API 參考說明文件

// For example, endpoint is "https://my-test-project.appspot.com/push".
sub, err := client.CreateSubscription(ctx, subName, pubsub.SubscriptionConfig{
	Topic:       topic,
	AckDeadline: 10 * time.Second,
	PushConfig:  pubsub.PushConfig{Endpoint: endpoint},
})
if err != nil {
	return err
}
fmt.Printf("Created subscription: %v\n", sub)

Java

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Java 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Java API 參考說明文件

try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
  ProjectTopicName topicName = ProjectTopicName.of(projectId, topicId);
  ProjectSubscriptionName subscriptionName =
      ProjectSubscriptionName.of(projectId, subscriptionId);

  // eg. endpoint = "https://my-test-project.appspot.com/push"
  PushConfig pushConfig = PushConfig.newBuilder().setPushEndpoint(endpoint).build();

  // acknowledgement deadline in seconds for the message received over the push endpoint
  int ackDeadlineInSeconds = 10;

  Subscription subscription =
      subscriptionAdminClient.createSubscription(
          subscriptionName, topicName, pushConfig, ackDeadlineInSeconds);
  return subscription;
}

Node.js

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Node.js 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Node.js API 參考說明文件

// Imports the Google Cloud client library
const {PubSub} = require('@google-cloud/pubsub');

// Creates a client
const pubsub = new PubSub();

/**
 * TODO(developer): Uncomment the following lines to run the sample.
 */
// const topicName = 'my-topic';
// const subscriptionName = 'my-sub';

const options = {
  pushConfig: {
    // Set to an HTTPS endpoint of your choice. If necessary, register
    // (authorize) the domain on which the server is hosted.
    pushEndpoint: `https://${pubsub.projectId}.appspot.com/push`,
  },
};

await pubsub.topic(topicName).createSubscription(subscriptionName, options);
console.log(`Subscription ${subscriptionName} created.`);

PHP

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 PHP 設定說明進行操作。詳情請參閱 Cloud Pub/Sub PHP API 參考說明文件

use Google\Cloud\PubSub\PubSubClient;

/**
 * Creates a Pub/Sub push subscription.
 *
 * @param string $projectId  The Google project ID.
 * @param string $topicName  The Pub/Sub topic name.
 * @param string $subscriptionName  The Pub/Sub subscription name.
 * @param string $endpoint  The endpoint for the push subscription.
 */
function create_push_subscription($projectId, $topicName, $subscriptionName, $endpoint)
{
    $pubsub = new PubSubClient([
        'projectId' => $projectId,
    ]);
    $topic = $pubsub->topic($topicName);
    $subscription = $topic->subscription($subscriptionName);
    $subscription->create([
        'endpoint' => $endpoint
    ]);

    printf('Subscription created: %s' . PHP_EOL, $subscription->name());
}

Python

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Python 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Python API 參考說明文件

from google.cloud import pubsub_v1

# TODO project_id = "Your Google Cloud Project ID"
# TODO topic_name = "Your Pub/Sub topic name"
# TODO subscription_name = "Your Pub/Sub subscription name"
# TODO endpoint = "https://my-test-project.appspot.com/push"

subscriber = pubsub_v1.SubscriberClient()
topic_path = subscriber.topic_path(project_id, topic_name)
subscription_path = subscriber.subscription_path(
    project_id, subscription_name)

push_config = pubsub_v1.types.PushConfig(
    push_endpoint=endpoint)

subscription = subscriber.create_subscription(
    subscription_path, topic_path, push_config)

print('Push subscription created: {}'.format(subscription))
print('Endpoint for subscription is: {}'.format(endpoint))

Ruby

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Ruby 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Ruby API 參考說明文件

# project_id        = "Your Google Cloud Project ID"
# topic_name        = "Your Pubsub topic name"
# subscription_name = "Your Pubsub subscription name"
# endpoint          = "Endpoint where your app receives messages"
require "google/cloud/pubsub"

pubsub = Google::Cloud::Pubsub.new project: project_id

topic        = pubsub.topic topic_name
subscription = topic.subscribe subscription_name,
                               endpoint: endpoint

puts "Push subscription #{subscription_name} created."

在推送和提取訂閱項目之間切換

您可以使用 Cloud Pub/Sub GCP 主控台變更訂閱類型。在主控台中,編輯訂閱項目並將「Delivery Type」(傳送類型) 變更為「Pull」(提取) 或「Push」(推送)

或者,您也可以使用 gcloud 指令列工具。具體而言,請使用 modify-push-config 修改推送端點網址。

  • 如要將推送訂閱項目轉換為提取,請將網址變更為空白字串。
  • 如要將提取訂閱項目轉換為推送,請設定有效網址。

範例:修改訂閱項目端點或傳遞機制

建立訂閱項目之後,您可以更新訂閱項目的推送端點,或從推送切換至提取,反之亦然。以下範例說明如何指定非空白的有效 HTTPS 推送端點網址,來更新現有提取或推送訂閱項目。

GCLOUD 指令

   gcloud pubsub subscriptions modify-push-config mySubscription --push-endpoint="https://anotherapp.appspot.com/push"

Go

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Go 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Go API 參考說明文件

// For example, endpoint is "https://my-test-project.appspot.com/push".
subConfig, err := client.Subscription(subName).Update(ctx, pubsub.SubscriptionConfigToUpdate{
	PushConfig: &pubsub.PushConfig{Endpoint: endpoint},
})
if err != nil {
	return err
}
fmt.Printf("Updated subscription config: %#v", subConfig)

Java

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Java 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Java API 參考說明文件

try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
  ProjectSubscriptionName subscriptionName =
      ProjectSubscriptionName.of(projectId, subscriptionId);
  PushConfig pushConfig = PushConfig.newBuilder().setPushEndpoint(endpoint).build();
  subscriptionAdminClient.modifyPushConfig(subscriptionName, pushConfig);
}

Node.js

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Node.js 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Node.js API 參考說明文件

// Imports the Google Cloud client library
const {PubSub} = require('@google-cloud/pubsub');

// Creates a client
const pubsub = new PubSub();

/**
 * TODO(developer): Uncomment the following line to run the sample.
 */
// const topicName = 'my-topic';
// const subscriptionName = 'my-sub';

const options = {
  // Set to an HTTPS endpoint of your choice. If necessary, register
  // (authorize) the domain on which the server is hosted.
  pushEndpoint: `https://${pubsub.projectId}.appspot.com/push`,
};

await pubsub
  .topic(topicName)
  .subscription(subscriptionName)
  .modifyPushConfig(options);
console.log(`Modified push config for subscription ${subscriptionName}.`);

Python

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Python 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Python API 參考說明文件

from google.cloud import pubsub_v1

# TODO project_id = "Your Google Cloud Project ID"
# TODO topic_name = "Your Pub/Sub topic name"
# TODO subscription_name = "Your Pub/Sub subscription name"
# TODO endpoint = "https://my-test-project.appspot.com/push"

subscriber = pubsub_v1.SubscriberClient()
subscription_path = subscriber.subscription_path(
    project_id, subscription_name)

push_config = pubsub_v1.types.PushConfig(
    push_endpoint=endpoint)

subscription = pubsub_v1.types.Subscription(
    name=subscription_path,
    push_config=push_config)

update_mask = {
    'paths': {
        'push_config',
    }
}

subscriber.update_subscription(subscription, update_mask)
result = subscriber.get_subscription(subscription_path)

print('Subscription updated: {}'.format(subscription_path))
print('New endpoint for subscription is: {}'.format(
    result.push_config))

Ruby

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Ruby 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Ruby API 參考說明文件

# project_id        = "Your Google Cloud Project ID"
# subscription_name = "Your Pubsub subscription name"
# new_endpoint      = "Endpoint where your app receives messages""
require "google/cloud/pubsub"

pubsub = Google::Cloud::Pubsub.new project: project_id

subscription          = pubsub.subscription subscription_name
subscription.endpoint = new_endpoint

puts "Push endpoint updated."

修改訂閱項目效期政策

根據預設,訂閱沒有活動 31 天後就會過期。如果 Cloud Pub/Sub 偵測到訂閱者活動 (例如公開連線、主動提取或成功推送),訂閱刪除時鐘就會重新啟動。

如需變更此項行為,請修改訂閱項目的效期政策。您可於建立訂閱時設定政策期限,或是於之後進行修改。效期政策的最小允許值為 1 天,沒有上限。請使用下列選項設定政策:

保留未確認及已確認訊息

根據預設,Cloud Pub/Sub 可確保訂閱項目會將未確認訊息保留 7 天 (自發布當下起算)。經過本屬性指定的時間後,不論確認狀態為何,訊息就可能遺失。您可使用 messageRetentionDuration 指定訂閱項目應保留訊息的時間長度,最長可達 7 天。您也可以透過設定,讓訂閱項目將已確認的訊息保留 7 天。請參閱重播與捨棄訊息

列出訂閱項目

您可以列出專案中的所有訂閱項目,也可以僅列出特定主題的訂閱項目。 必要時,請參閱存取權控管,瞭解限制存取權的詳細資訊。 以下範例說明如何列出專案中的所有訂閱項目。

GCLOUD 指令

   gcloud pubsub subscriptions list

C#

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 C# 設定說明進行操作。詳情請參閱 Cloud Pub/Sub C# API 參考說明文件

SubscriberServiceApiClient subscriber = SubscriberServiceApiClient.Create();
ProjectName projectName = new ProjectName(projectId);
IEnumerable<Subscription> subscriptions =
    subscriber.ListSubscriptions(projectName);
foreach (Subscription subscription in subscriptions)
{
    Console.WriteLine($"{subscription}");
}

Go

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Go 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Go API 參考說明文件

var subs []*pubsub.Subscription
it := client.Subscriptions(ctx)
for {
	s, err := it.Next()
	if err == iterator.Done {
		break
	}
	if err != nil {
		return nil, err
	}
	subs = append(subs, s)
}

Java

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Java 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Java API 參考說明文件

try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
  ListSubscriptionsRequest listSubscriptionsRequest =
      ListSubscriptionsRequest.newBuilder()
          .setProject(ProjectName.of(projectId).toString())
          .build();
  ListSubscriptionsPagedResponse response =
      subscriptionAdminClient.listSubscriptions(listSubscriptionsRequest);
  Iterable<Subscription> subscriptions = response.iterateAll();
  for (Subscription subscription : subscriptions) {
    // do something with the subscription
  }
  return response;
}

Node.js

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Node.js 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Node.js API 參考說明文件

// Imports the Google Cloud client library
const {PubSub} = require('@google-cloud/pubsub');

// Creates a client
const pubsub = new PubSub();

// Lists all subscriptions in the current project
const [subscriptions] = await pubsub.getSubscriptions();
console.log('Subscriptions:');
subscriptions.forEach(subscription => console.log(subscription.name));

PHP

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 PHP 設定說明進行操作。詳情請參閱 Cloud Pub/Sub PHP API 參考說明文件

use Google\Cloud\PubSub\PubSubClient;

/**
 * Lists all Pub/Sub subscriptions.
 *
 * @param string $projectId  The Google project ID.
 */
function list_subscriptions($projectId)
{
    $pubsub = new PubSubClient([
        'projectId' => $projectId,
    ]);
    foreach ($pubsub->subscriptions() as $subscription) {
        printf('Subscription: %s' . PHP_EOL, $subscription->name());
    }
}

Python

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Python 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Python API 參考說明文件

from google.cloud import pubsub_v1

# TODO project_id = "Your Google Cloud Project ID"

subscriber = pubsub_v1.SubscriberClient()
project_path = subscriber.project_path(project_id)

for subscription in subscriber.list_subscriptions(project_path):
    print(subscription.name)

Ruby

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Ruby 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Ruby API 參考說明文件

# project_id = Your Google Cloud Project ID
require "google/cloud/pubsub"

pubsub = Google::Cloud::Pubsub.new project: project_id

subscriptions = pubsub.list_subscriptions

puts "Subscriptions:"
subscriptions.each do |subscription|
  puts subscription.name
end

存取訂閱項目

以下範例說明如何存取特定主題的訂閱項目。

GCLOUD 指令

   gcloud pubsub topics list-subscriptions myTopic

Go

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Go 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Go API 參考說明文件

var subs []*pubsub.Subscription

it := client.Topic(topicID).Subscriptions(ctx)
for {
	sub, err := it.Next()
	if err == iterator.Done {
		break
	}
	if err != nil {
		return nil, err
	}
	subs = append(subs, sub)
}

Java

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Java 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Java API 參考說明文件

try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
  ProjectTopicName topicName = ProjectTopicName.of(projectId, topicId);
  ListTopicSubscriptionsRequest request =
      ListTopicSubscriptionsRequest.newBuilder().setTopic(topicName.toString()).build();
  ListTopicSubscriptionsPagedResponse response =
      topicAdminClient.listTopicSubscriptions(request);
  Iterable<String> subscriptionNames = response.iterateAll();
  for (String subscriptionName : subscriptionNames) {
    // do something with the subscription name
  }
  return response;
}

Node.js

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Node.js 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Node.js API 參考說明文件

// Imports the Google Cloud client library
const {PubSub} = require('@google-cloud/pubsub');

// Creates a client
const pubsub = new PubSub();

/**
 * TODO(developer): Uncomment the following line to run the sample.
 */
// const topicName = 'my-topic';

// Lists all subscriptions for the topic
const [subscriptions] = await pubsub.topic(topicName).getSubscriptions();
console.log(`Subscriptions for ${topicName}:`);
subscriptions.forEach(subscription => console.log(subscription.name));

Python

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Python 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Python API 參考說明文件

from google.cloud import pubsub_v1

# TODO project_id = "Your Google Cloud Project ID"
# TODO topic_name = "Your Pub/Sub topic name"

publisher = pubsub_v1.PublisherClient()
topic_path = publisher.topic_path(project_id, topic_name)

for subscription in publisher.list_topic_subscriptions(topic_path):
    print(subscription)

Ruby

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Ruby 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Ruby API 參考說明文件

# project_id = "Your Google Cloud Project ID"
# topic_name = "Your Pubsub topic name"
require "google/cloud/pubsub"

pubsub = Google::Cloud::Pubsub.new project: project_id

topic         = pubsub.topic topic_name
subscriptions = topic.subscriptions

puts "Subscriptions in topic #{topic.name}:"
subscriptions.each do |subscription|
  puts subscription.name
end

刪除訂閱項目

以下範例說明如何刪除專案中不再需要的訂閱項目。

GCLOUD 指令

   gcloud pubsub subscriptions delete mySubscription

C#

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 C# 設定說明進行操作。詳情請參閱 Cloud Pub/Sub C# API 參考說明文件

SubscriberServiceApiClient subscriber = SubscriberServiceApiClient.Create();
SubscriptionName subscriptionName = new SubscriptionName(projectId,
    subscriptionId);
subscriber.DeleteSubscription(subscriptionName);
Console.WriteLine("Subscription deleted.");

Go

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Go 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Go API 參考說明文件

sub := client.Subscription(subName)
if err := sub.Delete(ctx); err != nil {
	return err
}
fmt.Println("Subscription deleted.")

Java

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Java 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Java API 參考說明文件

try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
  ProjectSubscriptionName subscriptionName =
      ProjectSubscriptionName.of(projectId, subscriptionId);
  subscriptionAdminClient.deleteSubscription(subscriptionName);
  return subscriptionName;
}

Node.js

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Node.js 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Node.js API 參考說明文件

// Imports the Google Cloud client library
const {PubSub} = require('@google-cloud/pubsub');

// Creates a client
const pubsub = new PubSub();

/**
 * TODO(developer): Uncomment the following line to run the sample.
 */
// const subscriptionName = 'my-sub';

// Deletes the subscription
await pubsub.subscription(subscriptionName).delete();
console.log(`Subscription ${subscriptionName} deleted.`);

PHP

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 PHP 設定說明進行操作。詳情請參閱 Cloud Pub/Sub PHP API 參考說明文件

use Google\Cloud\PubSub\PubSubClient;

/**
 * Creates a Pub/Sub subscription.
 *
 * @param string $projectId  The Google project ID.
 * @param string $subscriptionName  The Pub/Sub subscription name.
 */
function delete_subscription($projectId, $subscriptionName)
{
    $pubsub = new PubSubClient([
        'projectId' => $projectId,
    ]);
    $subscription = $pubsub->subscription($subscriptionName);
    $subscription->delete();

    printf('Subscription deleted: %s' . PHP_EOL, $subscription->name());
}

Python

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Python 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Python API 參考說明文件

from google.cloud import pubsub_v1

# TODO project_id = "Your Google Cloud Project ID"
# TODO subscription_name = "Your Pub/Sub subscription name"

subscriber = pubsub_v1.SubscriberClient()
subscription_path = subscriber.subscription_path(
    project_id, subscription_name)

subscriber.delete_subscription(subscription_path)

print('Subscription deleted: {}'.format(subscription_path))

Ruby

在嘗試這個範例之前,請至 Cloud Pub/Sub 快速入門導覽課程:使用用戶端程式庫,按照 Ruby 設定說明進行操作。詳情請參閱 Cloud Pub/Sub Ruby API 參考說明文件

# project_id        = "Your Google Cloud Project ID"
# subscription_name = "Your Pubsub subscription name"
require "google/cloud/pubsub"

pubsub = Google::Cloud::Pubsub.new project: project_id

subscription = pubsub.subscription subscription_name
subscription.delete

puts "Subscription #{subscription_name} deleted."

資源名稱

Cloud Pub/Sub 資源名稱是訂閱和主題等 Cloud Pub/Sub 資源的專屬識別名稱,必須符合下列格式:

projects/project-identifier/collection/relative-name

「project-identifier」必須為可從 Google Cloud Platform 主控台取得的專案 ID。例如,projects/myproject/topics/mytopic

「collection」必須是 subscriptionstopics 的其中一個。

「relative-name」必須:

  • 以英文字母開頭
  • 由 3 到 255 個字元組成
  • 僅包含下列字元:

    • 字母:[A-Za-z]
    • 數字:[0-9]
    • 破折號:-
    • 底線:_
    • 句號:.
    • 波浪號:~
    • 加號:+
    • 百分比符號:%

      雖然可以在資源名稱中使用上述特殊字元,但您必須確保在用於網址時,正確地編碼/解碼字元;這對 REST 呼叫非常重要。

「relative-name」開頭不得為字串 goog

您可以在資源名稱中包含特殊字元,例如,mi-tópico 是無效的「relative-name」,但 mi-t%C3%B3pico 有效。

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Cloud Pub/Sub 說明文件