{GCP Cloud Pub/Sub}サブスクリプションの概要

 

https://qiita.com/ekzemplaro/items/2c47beb962bee54b4609

https://cloud.google.com/pubsub/docs/subscription-overview?hl=ja


pull サブスクリプション : サブスクライバー クライアントを使用して Pub/Sub サーバーにメッセージをリクエストします。
push サブスクリプション : Pub/Sub サーバーを使用してサブスクライバー アプリケーションにリクエストを開始し、メッセージを配信します。


デフォルトでは、サブスクライバーが 31 日間使用されていない場合、またはサブスクリプションが更新されない場合、サブスクリプションは期限切れになります。


デフォルトでは、Pub/Sub トピックは、そのトピックに関連付けられたすべてのサブスクリプションによって確認応答された時点でメッセージを破棄します。
未確認メッセージは、デフォルトで 7 日間保持されます(最小10分、最大31日)

メッセージは、トピックまたはサブスクリプションのメッセージ保持期間(いずれか長い方)だけ保持されます。


トピックのメッセージ保持が設定されていない場合、
経過時間がサブスクリプションの message_retention_duration プロパティを超えると、
サブスクリプションから未確認応答メッセージが削除されます。
一方、トピックのメッセージ保持が設定されている場合、
未確認応答メッセージがサブスクリプションから削除されるのは、
メッセージの経過時間がトピックとサブスクリプションの message_retention_duration の最大値を超える場合だけです。

 

-- 1. 前作業

gcloud init
gcloud auth list

gcloud --version

gcloud projects create project01-9999999 \
--name="project01"

gcloud config list
gcloud config set project project01-9999999
gcloud config set compute/region asia-northeast1 --quiet
gcloud config set compute/zone asia-northeast1-a --quiet

gcloud beta billing accounts list
gcloud beta billing projects link project01-9999999 --billing-account=111111-111111-111111

gcloud services enable compute.googleapis.com --project project01-9999999

gcloud components update


-- 2. 動作確認


-- 2.1 サブスクリプション作成前にパブリッシュされたメッセージを受信できないこと


gcloud pubsub topics create topic11
gcloud pubsub topics list


gcloud pubsub topics publish topic11 --message="hello"


gcloud pubsub subscriptions create ss11 --topic=topic11
gcloud pubsub subscriptions list
gcloud pubsub topics list-subscriptions topic11

gcloud pubsub subscriptions pull ss11 --auto-ack


Listed 0 items.


gcloud pubsub subscriptions delete ss11
gcloud pubsub topics delete topic11


-- 2.2 pull前にパブリッシュされたメッセージを受信できること

gcloud pubsub topics create topic21
gcloud pubsub topics list


gcloud pubsub subscriptions create ss21 --topic=topic21
gcloud pubsub subscriptions list
gcloud pubsub topics list-subscriptions topic21


gcloud pubsub topics publish topic21 --message="hello"


gcloud pubsub subscriptions pull ss21 --auto-ack

lqqqqqqqwqqqqqqqqqqqqqqqqqqwqqqqqqqqqqqqqqwqqqqqqqqqqqqwqqqqqqqqqqqqqqqqqqwqqqqqqqqqqqqk
x  DATA x    MESSAGE_ID    x ORDERING_KEY x ATTRIBUTES x DELIVERY_ATTEMPT x ACK_STATUS x
tqqqqqqqnqqqqqqqqqqqqqqqqqqnqqqqqqqqqqqqqqnqqqqqqqqqqqqnqqqqqqqqqqqqqqqqqqnqqqqqqqqqqqqu
x hello x 9789531110559463 x              x            x                  x SUCCESS    x
mqqqqqqqvqqqqqqqqqqqqqqqqqqvqqqqqqqqqqqqqqvqqqqqqqqqqqqvqqqqqqqqqqqqqqqqqqvqqqqqqqqqqqqj

 

gcloud pubsub subscriptions delete ss21
gcloud pubsub topics delete topic21

 

-- 2.3 pull後にパブリッシュされたメッセージを受信できること

gcloud pubsub topics create topic31
gcloud pubsub topics list


gcloud pubsub subscriptions create ss31 --topic=topic31
gcloud pubsub subscriptions list
gcloud pubsub topics list-subscriptions topic31


gcloud pubsub subscriptions pull ss31 --auto-ack

 

別タームから実行
gcloud pubsub topics publish topic31 --message="hello"


lqqqqqqqwqqqqqqqqqqqqqqqqqqwqqqqqqqqqqqqqqwqqqqqqqqqqqqwqqqqqqqqqqqqqqqqqqwqqqqqqqqqqqqk
x  DATA x    MESSAGE_ID    x ORDERING_KEY x ATTRIBUTES x DELIVERY_ATTEMPT x ACK_STATUS x
tqqqqqqqnqqqqqqqqqqqqqqqqqqnqqqqqqqqqqqqqqnqqqqqqqqqqqqnqqqqqqqqqqqqqqqqqqnqqqqqqqqqqqqu
x hello x 9790368951281326 x              x            x                  x SUCCESS    x
mqqqqqqqvqqqqqqqqqqqqqqqqqqvqqqqqqqqqqqqqqvqqqqqqqqqqqqvqqqqqqqqqqqqqqqqqqvqqqqqqqqqqqqj

 

gcloud pubsub subscriptions delete ss31
gcloud pubsub topics delete topic31

 

-- 2.4 2件のメッセージをパブリッシュした場合、pullで2回メッセージを受信できること


gcloud pubsub topics create topic41
gcloud pubsub topics list


gcloud pubsub subscriptions create ss41 --topic=topic41
gcloud pubsub subscriptions list
gcloud pubsub topics list-subscriptions topic41


gcloud pubsub topics publish topic41 --message="hello1"
gcloud pubsub topics publish topic41 --message="hello2"

 

gcloud pubsub subscriptions pull ss41 --auto-ack

lqqqqqqqqwqqqqqqqqqqqqqqqqqqwqqqqqqqqqqqqqqwqqqqqqqqqqqqwqqqqqqqqqqqqqqqqqqwqqqqqqqqqqqqk
x  DATA  x    MESSAGE_ID    x ORDERING_KEY x ATTRIBUTES x DELIVERY_ATTEMPT x ACK_STATUS x
tqqqqqqqqnqqqqqqqqqqqqqqqqqqnqqqqqqqqqqqqqqnqqqqqqqqqqqqnqqqqqqqqqqqqqqqqqqnqqqqqqqqqqqqu
x hello1 x 9790071176362997 x              x            x                  x SUCCESS    x
mqqqqqqqqvqqqqqqqqqqqqqqqqqqvqqqqqqqqqqqqqqvqqqqqqqqqqqqvqqqqqqqqqqqqqqqqqqvqqqqqqqqqqqqj

gcloud pubsub subscriptions pull ss41 --auto-ack

lqqqqqqqqwqqqqqqqqqqqqqqqqqqwqqqqqqqqqqqqqqwqqqqqqqqqqqqwqqqqqqqqqqqqqqqqqqwqqqqqqqqqqqqk
x  DATA  x    MESSAGE_ID    x ORDERING_KEY x ATTRIBUTES x DELIVERY_ATTEMPT x ACK_STATUS x
tqqqqqqqqnqqqqqqqqqqqqqqqqqqnqqqqqqqqqqqqqqnqqqqqqqqqqqqnqqqqqqqqqqqqqqqqqqnqqqqqqqqqqqqu
x hello2 x 9790644832895413 x              x            x                  x SUCCESS    x
mqqqqqqqqvqqqqqqqqqqqqqqqqqqvqqqqqqqqqqqqqqvqqqqqqqqqqqqvqqqqqqqqqqqqqqqqqqvqqqqqqqqqqqqj

gcloud pubsub subscriptions pull ss41 --auto-ack

Listed 0 items.

gcloud pubsub subscriptions delete ss41
gcloud pubsub topics delete topic41

 

-- 2.5 メッセージ保持期限10分の場合、10分後にpullしてもメッセージを受信できないこと

gcloud pubsub topics create topic51 --message-retention-duration=10m
gcloud pubsub topics list


gcloud pubsub subscriptions create ss51 --topic=topic51 --message-retention-duration=10m
gcloud pubsub subscriptions list
gcloud pubsub topics list-subscriptions topic51


gcloud pubsub topics publish topic51 --message="hello"

10分待つ


gcloud pubsub subscriptions pull ss51 --auto-ack

Listed 0 items.


gcloud pubsub subscriptions delete ss51
gcloud pubsub topics delete topic51

 

-- 2.6 確認応答のないサブスクリプションがある場合、メッセージは破棄されないこと

gcloud pubsub topics create topic61
gcloud pubsub topics list


gcloud pubsub subscriptions create ss61 --topic=topic61
gcloud pubsub subscriptions create ss62 --topic=topic61
gcloud pubsub subscriptions list
gcloud pubsub topics list-subscriptions topic61


gcloud pubsub topics publish topic61 --message="hello"


gcloud pubsub subscriptions pull ss61
gcloud pubsub subscriptions pull ss62 --auto-ack


gcloud pubsub subscriptions pull ss62 --auto-ack

Listed 0 items.


gcloud pubsub subscriptions pull ss61 --auto-ack


lqqqqqqqwqqqqqqqqqqqqqqqqqqwqqqqqqqqqqqqqqwqqqqqqqqqqqqwqqqqqqqqqqqqqqqqqqwqqqqqqqqqqqqk
x  DATA x    MESSAGE_ID    x ORDERING_KEY x ATTRIBUTES x DELIVERY_ATTEMPT x ACK_STATUS x
tqqqqqqqnqqqqqqqqqqqqqqqqqqnqqqqqqqqqqqqqqnqqqqqqqqqqqqnqqqqqqqqqqqqqqqqqqnqqqqqqqqqqqqu
x hello x 9791189441131290 x              x            x                  x SUCCESS    x
mqqqqqqqvqqqqqqqqqqqqqqqqqqvqqqqqqqqqqqqqqvqqqqqqqqqqqqvqqqqqqqqqqqqqqqqqqvqqqqqqqqqqqqj


gcloud pubsub subscriptions delete ss61
gcloud pubsub subscriptions delete ss62
gcloud pubsub topics delete topic61

 

-- 2.7 limitオプションで複数のメッセージをpullできること

Please note that this command is not guaranteed to return all the messages 
in your backlog or the maximum specified in the --limit argument.
Receiving fewer messages than available occasionally is normal.

 

gcloud pubsub topics create topic71
gcloud pubsub topics list


gcloud pubsub subscriptions create ss71 --topic=topic71
gcloud pubsub subscriptions list
gcloud pubsub topics list-subscriptions topic71


gcloud pubsub topics publish topic71 --message="hello"
gcloud pubsub topics publish topic71 --message="hello"
gcloud pubsub topics publish topic71 --message="hello"

 

gcloud pubsub subscriptions pull ss71 --auto-ack --limit 10

lqqqqqqqwqqqqqqqqqqqqqqqqqqwqqqqqqqqqqqqqqwqqqqqqqqqqqqwqqqqqqqqqqqqqqqqqqwqqqqqqqqqqqqk
x  DATA x    MESSAGE_ID    x ORDERING_KEY x ATTRIBUTES x DELIVERY_ATTEMPT x ACK_STATUS x
tqqqqqqqnqqqqqqqqqqqqqqqqqqnqqqqqqqqqqqqqqnqqqqqqqqqqqqnqqqqqqqqqqqqqqqqqqnqqqqqqqqqqqqu
x hello x 9844628876044695 x              x            x                  x SUCCESS    x
x hello x 9844525041324332 x              x            x                  x SUCCESS    x
x hello x 9844327882943317 x              x            x                  x SUCCESS    x
mqqqqqqqvqqqqqqqqqqqqqqqqqqvqqqqqqqqqqqqqqvqqqqqqqqqqqqvqqqqqqqqqqqqqqqqqqvqqqqqqqqqqqqj

gcloud pubsub subscriptions pull ss71 --auto-ack --limit 10

Listed 0 items.


gcloud pubsub subscriptions delete ss71
gcloud pubsub topics delete topic71

 

 


-- 3. クリーンアップ

 

gcloud projects list
gcloud projects delete project01-9999999 --quiet