Google cloud platform 在主题之间移动Google发布/订阅消息

Google cloud platform 在主题之间移动Google发布/订阅消息,google-cloud-platform,google-cloud-pubsub,Google Cloud Platform,Google Cloud Pubsub,如何在GCP发布/订阅中将邮件从一个主题批量移动到另一个主题 我知道提供此功能的数据流模板,但不幸的是,限制不允许我使用数据流API 关于在主题之间临时移动消息的任何建议(除了逐个复制和粘贴?) 具体来说,该用例用于将死信主题中的消息移回原始主题以进行重新处理。您不能使用快照,因为快照只能应用于相同主题的订阅(以避免消息ID重叠) 最简单的方法是编写一个函数来获取订阅。在这里,我将如何做: 使用推送订阅创建主题(例如,名为“传输主题”)。将超时设置为10分钟 创建由(或)触发的。部署时,将和

如何在GCP发布/订阅中将邮件从一个主题批量移动到另一个主题

我知道提供此功能的数据流模板,但不幸的是,限制不允许我使用数据流API

关于在主题之间临时移动消息的任何建议(除了逐个复制和粘贴?)


具体来说,该用例用于将死信主题中的消息移回原始主题以进行重新处理。

您不能使用快照,因为快照只能应用于相同主题的订阅(以避免消息ID重叠)

最简单的方法是编写一个函数来获取订阅。在这里,我将如何做:

  • 使用推送订阅创建主题(例如,名为“传输主题”)。将超时设置为10分钟

  • 创建由(或)触发的。部署时,将和设置为。处理的内容如下所示

    • 从deadletter pull订阅中读取一段消息(例如1000)
    • 将消息(以批量模式)发布到初始主题中
    • 确认死信订阅的消息
    • 重复此操作直到请求订阅为空
    • 返回代码200
全球进程:

  • 在传输主题中发布消息
  • 该消息触发使用推送HTTP运行函数/云
  • 该过程将消息拉入并重新发布到初始主题中
  • 如果达到超时,函数崩溃,PubSub将重试HTTP请求(根据指数退避)
  • 如果所有消息都已处理,则返回HTTP 200响应代码并停止处理(并确认传输主题订阅中的消息)

这个过程允许您处理大量的消息,而不必担心超时。

我建议您使用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)
从google.cloud导入pubsub
从google.cloud.pubsub导入类型
#定义参数
PROJECT=“”
SUBSCRIPTION=“”
NEW_TOPIC=“projects//topics/”
#创建用于发布和订阅的客户端。根据您的需要调整max_消息
subscriber=pubsub.SubscriberClient()
publisher=pubsub.publisher客户端(
批次设置=类型。批次设置(最大消息数=500),
)
#收到你的信息。根据您的需要调整max_消息
订阅路径=订阅方。订阅路径(项目、订阅)
response=subscriber.pull(订阅路径,最大消息数=500)
#将消息发布到新主题
对于response.received_消息中的消息:
publisher.publish(新主题,msg.message.data)
#如有必要,确认旧订阅
ack\U id=[msg.ack\u响应中msg的id。收到的消息]
订阅方确认(订阅路径、确认ID)
在运行此代码之前,您需要在Python环境中安装PubSub CLI。您可以通过运行
pip安装googlecloud pubsub

执行代码的一种方法是使用云函数。如果您决定使用它,请注意两点:

  • 运行函数所需的最长时间为9分钟。如果超过此超时,您的函数将在未完成作业的情况下终止

  • 在云函数中,您可以将
    googlecloudpubsub
    放在需求文件的新行中,而不是运行pip命令