使用云函数批量读取Pub/Sub消息

问题描述 投票:0回答:2

阅读本指南: https://cloud.google.com/functions/docs/tutorials/pubsub

我遇到了一个问题,我需要以每批 1000 条的方式从 Pub/Sub 读取消息。我将通过我的云功能将消息批量发布到远程 API。

简而言之,每次调用需要从 Pub/Sub 读取 1000 条消息。

我之前使用

batch-size
参数对 Kinesis 和 Lambda 做过类似的操作,但尚未找到 Cloud function 的类似配置。

aws lambda create-event-source-mapping --region us-west-2 --function-name kinesis-to-bigquery --event-source <arn of the kinesis stream> --batch-size 1000 --starting-position TRIM_HORIZON

功能:

// Pub/Sub function
export function helloPubSub (event, callback) {
  const pubsubMessage = event.data;
  const name = pubsubMessage.data ? Buffer.from(pubsubMessage.data, 'base64').toString() : 'World';
  console.log(`Hello, ${name}!`);
  callback();
}

我的问题是使用云功能是否可以实现这一点,或者是否存在其他方法来解决此问题。

google-cloud-functions google-cloud-pubsub
2个回答
3
投票

Cloud Functions 不能像那样与发布/订阅一起使用 - 您不会从队列中读取消息。相反,事件会尽快单独传递到您的函数。如果您想等到收到 1000 条消息,则必须使用其他持久性机制自行将它们排队,然后在有足够的可用消息时对它们采取行动。


0
投票
截至 2023 年 3 月,(至少)有 2 个本机选项来处理此用例:

发布/订阅 > 云数据流。您将能够对流经 DataFlow 的消息进行批处理,还可以执行其他操作,例如对单个消息进行 API 调用、处理重复项等。

还可以选择使用 GCS 订阅直接从

Pub/sub 到 GCS。这种机制也可以处理批处理以及死信队列。

您可能很难制作一批恰好 1000 条消息,但如果您的要求是对象大小或经过的时间,那么上述是两个不错的选择。

© www.soinside.com 2019 - 2024. All rights reserved.