And*_*ira 5 publish-subscribe google-cloud-platform
我正在升级以前使用 RabbitMQ 的队列处理系统。
我目前正在导入 RabbitMQ 中的死信和指数退避功能,但是我似乎遇到了一些问题。
主要问题是,当我使用死信策略创建新订阅时,它似乎没有 Google 将消息转发到我的死信订阅所需的相关权限。
如下所示,在检查订阅详细信息时,Google 强调了该项目的 pubsub 服务帐户需要发布者角色和订阅者角色,以便发布并转发到死信主题。
UI 中提供了添加这些选项的选项,但是我需要完全通过我正在运行的使用者来处理此操作,因为这需要是一个自动化过程,因为这些使用者是由 SupervisorD 在后台运行的。
有谁知道我到底缺少什么,我已经阅读了所有文档,但并不完全清楚,我尝试将 IAM 中提到的权限添加到关联成员,但没有成功。
小智 5
为了将消息转发到死信主题,Pub/Sub 必须有权执行以下操作:
如果您想通过正在运行的使用者授予每个文档所需的权限,我建议通过Cloud SDK首先添加发布者角色:
PUBSUB_SERVICE_ACCOUNT="service-${project-number}@gcp-sa-pubsub.iam.gserviceaccount.com"
gcloud pubsub topics add-iam-policy-binding dead-letter-topic-id \
--member="serviceAccount:$PUBSUB_SERVICE_ACCOUNT"\
--role="roles/pubsub.publisher"
Run Code Online (Sandbox Code Playgroud)
然后,订阅者角色:
PUBSUB_SERVICE_ACCOUNT="service-${project-number}@gcp-sa-pubsub.iam.gserviceaccount.com"
gcloud pubsub subscriptions add-iam-policy-binding subscription-id \
--member="serviceAccount:$PUBSUB_SERVICE_ACCOUNT"\
--role="roles/pubsub.subscriber"
Run Code Online (Sandbox Code Playgroud)
有了该权限,您现在可以使用您喜欢的语言(例如 Python)来跟踪交付尝试:
from concurrent.futures import TimeoutError
from google.cloud import pubsub_v1
# TODO(developer)
# project_id = "your-project-id"
# subscription_id = "your-subscription-id"
subscriber = pubsub_v1.SubscriberClient()
subscription_path = subscriber.subscription_path(project_id, subscription_id)
def callback(message):
print("Received message: {}".format(message))
print("With delivery attempts: {}".format(message.delivery_attempt))
message.ack()
streaming_pull_future = subscriber.subscribe(subscription_path, callback=callback)
print("Listening for messages on {}..\n".format(subscription_path))
# Wrap subscriber in a 'with' block to automatically call close() when done.
with subscriber:
# When `timeout` is not set, result() will block indefinitely,
# unless an exception is encountered first.
try:
streaming_pull_future.result(timeout=timeout)
except TimeoutError:
streaming_pull_future.cancel()
Run Code Online (Sandbox Code Playgroud)
根据文档,您必须向托管源主题的项目的服务代理 (sa) Pubsub 服务帐户授予死信主题的 Pubsub 发布者角色。
-> 授权源项目在Dead letter主题中发布消息
您还必须向托管死信主题的项目的服务代理 (sa) Pubsub 服务帐户授予配置了死信功能的 souscription 的 Pubsub 订阅者角色。
-> 授权确认死信主题中发布的死信消息。
这里是服务代理 PubSub 服务帐户的模式
service-${project-number}@gcp-sa-pubsub.iam.gserviceaccount.com
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3423 次 |
| 最近记录: |