配信不能メッセージをデッドレター トピックに転送するサブスクリプションを作成します。
もっと見る
このコードサンプルを含む詳細なドキュメントについては、以下をご覧ください。
コードサンプル
C++
このサンプルを試す前に、Pub/Sub クイックスタート: クライアント ライブラリの使用にある C++ 向けの手順に従って設定を行ってください。 詳細については、Pub/Sub C++ API のリファレンス ドキュメントをご覧ください。
Pub/Sub に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
namespace pubsub = ::google::cloud::pubsub;
namespace pubsub_admin = ::google::cloud::pubsub_admin;
[](pubsub_admin::SubscriptionAdminClient client,
std::string const& project_id, std::string const& topic_id,
std::string const& subscription_id,
std::string const& dead_letter_topic_id,
int dead_letter_delivery_attempts) {
google::pubsub::v1::Subscription request;
request.set_name(
pubsub::Subscription(project_id, subscription_id).FullName());
request.set_topic(pubsub::Topic(project_id, topic_id).FullName());
request.mutable_dead_letter_policy()->set_dead_letter_topic(
pubsub::Topic(project_id, dead_letter_topic_id).FullName());
request.mutable_dead_letter_policy()->set_max_delivery_attempts(
dead_letter_delivery_attempts);
auto sub = client.CreateSubscription(request);
if (sub.status().code() == google::cloud::StatusCode::kAlreadyExists) {
std::cout << "The subscription already exists\n";
return;
}
if (!sub) throw std::move(sub).status();
std::cout << "The subscription was successfully created: "
<< sub->DebugString() << "\n";
std::cout << "It will forward dead letter messages to: "
<< sub->dead_letter_policy().dead_letter_topic() << "\n";
std::cout << "After " << sub->dead_letter_policy().max_delivery_attempts()
<< " delivery attempts.\n";
}
C#
このサンプルを試す前に、Pub/Sub クイックスタート: クライアント ライブラリの使用にある C# 向けの手順に従って設定を行ってください。 詳細については、Pub/Sub C# API のリファレンス ドキュメントをご覧ください。
Pub/Sub に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
using Google.Cloud.PubSub.V1;
using System;
public class CreateSubscriptionWithDeadLetterPolicySample
{
public Subscription CreateSubscriptionWithDeadLetterPolicy(string projectId, string topicId, string subscriptionId, string deadLetterTopicId)
{
SubscriberServiceApiClient subscriber = SubscriberServiceApiClient.Create();
// This is the subscription you want to create with a dead letter policy.
var subscriptionName = SubscriptionName.FromProjectSubscription(projectId, subscriptionId);
// This is an existing topic that you want to attach the subscription with dead letter policy to.
var topicName = TopicName.FromProjectTopic(projectId, topicId);
// This is an existing topic that the subscription with dead letter policy forwards dead letter messages to.
var deadLetterTopic = TopicName.FromProjectTopic(projectId, deadLetterTopicId).ToString();
var subscriptionRequest = new Subscription
{
SubscriptionName = subscriptionName,
TopicAsTopicName = topicName,
DeadLetterPolicy = new DeadLetterPolicy
{
DeadLetterTopic = deadLetterTopic,
// The maximum number of times that the service attempts to deliver a
// message before forwarding it to the dead letter topic. Must be [5-100].
MaxDeliveryAttempts = 10
},
AckDeadlineSeconds = 30
};
var subscription = subscriber.CreateSubscription(subscriptionRequest);
Console.WriteLine("Created subscription: " + subscription.SubscriptionName.SubscriptionId);
Console.WriteLine($"It will forward dead letter messages to: {subscription.DeadLetterPolicy.DeadLetterTopic}");
Console.WriteLine($"After {subscription.DeadLetterPolicy.MaxDeliveryAttempts} delivery attempts.");
// Remember to attach a subscription to the dead letter topic because
// messages published to a topic with no subscriptions are lost.
return subscription;
}
}
Go
このサンプルを試す前に、Pub/Sub クイックスタート: クライアント ライブラリの使用にある Go 向けの手順に従って設定を行ってください。 詳細については、Pub/Sub Go API のリファレンス ドキュメントをご覧ください。
Pub/Sub に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
import (
"context"
"fmt"
"io"
"time"
"cloud.google.com/go/pubsub"
)
// createSubWithDeadLetter creates a subscription with a dead letter policy.
func createSubWithDeadLetter(w io.Writer, projectID, subID string, topicID string, fullyQualifiedDeadLetterTopic string) error {
// projectID := "my-project-id"
// subID := "my-sub"
// topicID := "my-topic"
// fullyQualifiedDeadLetterTopic := "projects/my-project/topics/my-dead-letter-topic"
ctx := context.Background()
client, err := pubsub.NewClient(ctx, projectID)
if err != nil {
return fmt.Errorf("pubsub.NewClient: %w", err)
}
defer client.Close()
topic := client.Topic(topicID)
subConfig := pubsub.SubscriptionConfig{
Topic: topic,
AckDeadline: 20 * time.Second,
DeadLetterPolicy: &pubsub.DeadLetterPolicy{
DeadLetterTopic: fullyQualifiedDeadLetterTopic,
MaxDeliveryAttempts: 10,
},
}
sub, err := client.CreateSubscription(ctx, subID, subConfig)
if err != nil {
return fmt.Errorf("CreateSubscription: %w", err)
}
fmt.Fprintf(w, "Created subscription (%s) with dead letter topic (%s)\n", sub.String(), fullyQualifiedDeadLetterTopic)
fmt.Fprintln(w, "To process dead letter messages, remember to add a subscription to your dead letter topic.")
return nil
}
Java
このサンプルを試す前に、Pub/Sub クイックスタート: クライアント ライブラリの使用にある Java 向けの手順に従って設定を行ってください。 詳細については、Pub/Sub Java API のリファレンス ドキュメントをご覧ください。
Pub/Sub に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
import com.google.cloud.pubsub.v1.SubscriptionAdminClient;
import com.google.pubsub.v1.DeadLetterPolicy;
import com.google.pubsub.v1.ProjectSubscriptionName;
import com.google.pubsub.v1.ProjectTopicName;
import com.google.pubsub.v1.Subscription;
import java.io.IOException;
public class CreateSubscriptionWithDeadLetterPolicyExample {
public static void main(String... args) throws Exception {
// TODO(developer): Replace these variables before running the sample.
String projectId = "your-project-id";
// This is the subscription you want to create with a dead letter policy.
String subscriptionId = "your-subscription-id";
// This is an existing topic that you want to attach the subscription with dead letter policy
// to.
String topicId = "your-topic-id";
// This is an existing topic that the subscription with dead letter policy forwards dead letter
// messages to.
String deadLetterTopicId = "your-dead-letter-topic-id";
CreateSubscriptionWithDeadLetterPolicyExample.createSubscriptionWithDeadLetterPolicyExample(
projectId, subscriptionId, topicId, deadLetterTopicId);
}
public static void createSubscriptionWithDeadLetterPolicyExample(
String projectId, String subscriptionId, String topicId, String deadLetterTopicId)
throws IOException {
try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
ProjectTopicName topicName = ProjectTopicName.of(projectId, topicId);
ProjectSubscriptionName subscriptionName =
ProjectSubscriptionName.of(projectId, subscriptionId);
ProjectTopicName deadLetterTopicName = ProjectTopicName.of(projectId, deadLetterTopicId);
DeadLetterPolicy deadLetterPolicy =
DeadLetterPolicy.newBuilder()
.setDeadLetterTopic(deadLetterTopicName.toString())
// The maximum number of times that the service attempts to deliver a
// message before forwarding it to the dead letter topic. Must be [5-100].
.setMaxDeliveryAttempts(10)
.build();
Subscription request =
Subscription.newBuilder()
.setName(subscriptionName.toString())
.setTopic(topicName.toString())
.setDeadLetterPolicy(deadLetterPolicy)
.build();
Subscription subscription = subscriptionAdminClient.createSubscription(request);
System.out.println("Created subscription: " + subscription.getName());
System.out.println(
"It will forward dead letter messages to: "
+ subscription.getDeadLetterPolicy().getDeadLetterTopic());
System.out.println(
"After "
+ subscription.getDeadLetterPolicy().getMaxDeliveryAttempts()
+ " delivery attempts.");
// Remember to attach a subscription to the dead letter topic because
// messages published to a topic with no subscriptions are lost.
}
}
}
Node.js
/**
* TODO(developer): Uncomment these variables before running the sample.
*/
// const topicNameOrId = 'YOUR_TOPIC_NAME_OR_ID';
// const subscriptionNameOrId = 'YOUR_SUBSCRIPTION_NAME_OR_ID';
// const deadLetterTopicNameOrId = 'YOUR_DEAD_LETTER_TOPIC_NAME_OR_ID';
// Imports the Google Cloud client library
const {PubSub} = require('@google-cloud/pubsub');
// Creates a client; cache this for further use
const pubSubClient = new PubSub();
async function createSubscriptionWithDeadLetterPolicy(
topicNameOrId,
subscriptionNameOrId,
deadLetterTopicNameOrId
) {
// Creates a new subscription
const options = {
deadLetterPolicy: {
deadLetterTopic: pubSubClient.topic(deadLetterTopicNameOrId).name,
maxDeliveryAttempts: 10,
},
};
await pubSubClient
.topic(topicNameOrId)
.createSubscription(subscriptionNameOrId, options);
console.log(
`Created subscription ${subscriptionNameOrId} with dead letter topic ${deadLetterTopicNameOrId}.`
);
console.log(
'To process dead letter messages, remember to add a subscription to your dead letter topic.'
);
}
Node.js
/**
* TODO(developer): Uncomment these variables before running the sample.
*/
// const topicNameOrId = 'YOUR_TOPIC_NAME_OR_ID';
// const subscriptionNameOrId = 'YOUR_SUBSCRIPTION_NAME_OR_ID';
// const deadLetterTopicNameOrId = 'YOUR_DEAD_LETTER_TOPIC_NAME_OR_ID';
// Imports the Google Cloud client library
import {PubSub, CreateSubscriptionOptions} from '@google-cloud/pubsub';
// Creates a client; cache this for further use
const pubSubClient = new PubSub();
async function createSubscriptionWithDeadLetterPolicy(
topicNameOrId: string,
subscriptionNameOrId: string,
deadLetterTopicNameOrId: string
) {
// Creates a new subscription
const options: CreateSubscriptionOptions = {
deadLetterPolicy: {
deadLetterTopic: pubSubClient.topic(deadLetterTopicNameOrId).name,
maxDeliveryAttempts: 10,
},
};
await pubSubClient
.topic(topicNameOrId)
.createSubscription(subscriptionNameOrId, options);
console.log(
`Created subscription ${subscriptionNameOrId} with dead letter topic ${deadLetterTopicNameOrId}.`
);
console.log(
'To process dead letter messages, remember to add a subscription to your dead letter topic.'
);
}
PHP
このサンプルを試す前に、Pub/Sub クイックスタート: クライアント ライブラリの使用にある PHP 向けの手順に従って設定を行ってください。 詳細については、Pub/Sub PHP API のリファレンス ドキュメントをご覧ください。
Pub/Sub に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
use Google\Cloud\PubSub\PubSubClient;
/**
* Creates a Pub/Sub subscription with dead letter policy enabled.
*
* @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 $deadLetterTopicName The Pub/Sub topic to use for dead letter policy.
*/
function dead_letter_create_subscription($projectId, $topicName, $subscriptionName, $deadLetterTopicName)
{
$pubsub = new PubSubClient([
'projectId' => $projectId,
]);
$topic = $pubsub->topic($topicName);
$deadLetterTopic = $pubsub->topic($deadLetterTopicName);
$subscription = $topic->subscribe($subscriptionName, [
'deadLetterPolicy' => [
'deadLetterTopic' => $deadLetterTopic
]
]);
printf(
'Subscription %s created with dead letter topic %s' . PHP_EOL,
$subscription->name(),
$deadLetterTopic->name()
);
}
Python
このサンプルを試す前に、Pub/Sub クイックスタート: クライアント ライブラリの使用にある Python 向けの手順に従って設定を行ってください。 詳細については、Pub/Sub Python API のリファレンス ドキュメントをご覧ください。
Pub/Sub に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
from google.cloud import pubsub_v1
from google.cloud.pubsub_v1.types import DeadLetterPolicy
# TODO(developer)
# project_id = "your-project-id"
# endpoint = "https://my-test-project.appspot.com/push"
# TODO(developer): This is an existing topic that the subscription
# with dead letter policy is attached to.
# topic_id = "your-topic-id"
# TODO(developer): This is an existing subscription with a dead letter policy.
# subscription_id = "your-subscription-id"
# TODO(developer): This is an existing dead letter topic that the subscription
# with dead letter policy will forward dead letter messages to.
# dead_letter_topic_id = "your-dead-letter-topic-id"
# TODO(developer): This is the maximum number of delivery attempts allowed
# for a message before it gets delivered to a dead letter topic.
# max_delivery_attempts = 5
publisher = pubsub_v1.PublisherClient()
subscriber = pubsub_v1.SubscriberClient()
topic_path = publisher.topic_path(project_id, topic_id)
subscription_path = subscriber.subscription_path(project_id, subscription_id)
dead_letter_topic_path = publisher.topic_path(project_id, dead_letter_topic_id)
dead_letter_policy = DeadLetterPolicy(
dead_letter_topic=dead_letter_topic_path,
max_delivery_attempts=max_delivery_attempts,
)
with subscriber:
request = {
"name": subscription_path,
"topic": topic_path,
"dead_letter_policy": dead_letter_policy,
}
subscription = subscriber.create_subscription(request)
print(f"Subscription created: {subscription.name}")
print(
f"It will forward dead letter messages to: {subscription.dead_letter_policy.dead_letter_topic}."
)
print(
f"After {subscription.dead_letter_policy.max_delivery_attempts} delivery attempts."
)
Ruby
このサンプルを試す前に、Pub/Sub クイックスタート: クライアント ライブラリの使用にある Ruby 向けの手順に従って設定を行ってください。 詳細については、Pub/Sub Ruby API のリファレンス ドキュメントをご覧ください。
Pub/Sub に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
# topic_id = "your-topic-id"
# subscription_id = "your-subscription-id"
# dead_letter_topic_id = "your-dead-letter-topic-id"
pubsub = Google::Cloud::Pubsub.new
topic = pubsub.topic topic_id
dead_letter_topic = pubsub.topic dead_letter_topic_id
subscription = topic.subscribe subscription_id,
dead_letter_topic: dead_letter_topic,
dead_letter_max_delivery_attempts: 10
puts "Created subscription #{subscription_id} with dead letter topic #{dead_letter_topic_id}."
puts "To process dead letter messages, remember to add a subscription to your dead letter topic."
次のステップ
他の Google Cloud プロダクトに関連するコードサンプルの検索およびフィルタ検索を行うには、Google Cloud のサンプルをご覧ください。