如何在GCP发布/订阅中将邮件从一个主题批量转移到另一个主题?
我知道提供此功能的Dataflow模板,但是很遗憾,限制使我无法使用Dataflow API。
关于主题之间消息临时传输的任何建议(除了一对一复制和粘贴?)
具体地说,用例是将死信主题中的消息移回原始主题以进行重新处理。
答案 0 :(得分:0)
您不能使用快照,因为快照只能应用于相同主题的订阅(以避免消息ID重叠)。
最简单的方法是编写一个函数来拉您的订阅。在这里,我将如何做:
创建带有推送订阅的主题(例如,命名为“ transfer-topic”)。将超时设置为10分钟
创建由Cloud Functions HTTP(或PubSub push subscription)触发的CLoud Run service。部署它时,将timeout to 9 minutes for Cloud Function设置为10 minutes for Cloud Run。处理内容如下
全球流程:
此过程使您可以处理大量消息,而不必担心超时。
答案 1 :(得分:0)
我建议您为此使用Python脚本。 您可以使用 PubSub CLI 阅读消息并发布到另一个主题,如下所示:
from google.cloud import pubsub
from google.cloud.pubsub import types
# Defining parameters
PROJECT = "<your_project_id>"
SUBSCRIPTION = "<your_current_subscription_name>"
NEW_TOPIC = "projects/<your_project_id>/topics/<your_new_topic_name>"
# Creating clients for publishing and subscribing. Adjust the max_messages for your purpose
subscriber = pubsub.SubscriberClient()
publisher = pubsub.PublisherClient(
batch_settings=types.BatchSettings(max_messages=500),
)
# Get your messages. Adjust the max_messages for your purpose
subscription_path = subscriber.subscription_path(PROJECT, SUBSCRIPTION)
response = subscriber.pull(subscription_path, max_messages=500)
# Publish your messages to the new topic
for msg in response.received_messages:
publisher.publish(NEW_TOPIC, msg.message.data)
# Ack the old subscription if necessary
ack_ids = [msg.ack_id for msg in response.received_messages]
subscriber.acknowledge(subscription_path, ack_ids)
在运行此代码之前,您需要在 Python 环境中安装 PubSub CLI 。您可以运行pip install google-cloud-pubsub
一种执行代码的方法是使用 Cloud Functions 。如果决定使用它,请注意两点:
您的功能最多可以运行9分钟。如果超过此超时时间,您的功能将终止,而不会完成工作。
在Cloud Functions中,您可以仅将google-cloud-pubsub
放入需求文件的新行中,而无需运行pip命令。