摘要:我的客户代码通过将消息发布到发布/订阅主题来触发861后台Google Cloud Function。每个Cloud Function都执行一个任务,将结果上传到Google Storage,并将消息发布到客户端代码正在监听的另一个Pub / Sub主题。尽管执行了所有Cloud Functions(通过Google Storage中的结果数验证),客户端代码不会接收所有消息。
服务器端:我有一个后台Google Cloud Function,每次将消息发布到TRIGGER Pub / Sub主题时都会触发。消息数据的自定义属性根据功能执行特定任务的方式充当功能参数。然后将结果上传到Google存储空间中的存储桶,并将一条消息(带有taskID和执行时间详细信息)发布到RESULTS Pub / Sub主题(与用于触发此功能的消息不同)。
客户端:我需要执行861个不同的任务,这需要使用861个稍微不同的输入来调用Cloud Function。这些任务是相似的,云功能执行它们需要20秒钟至2分钟(中位数约为1分钟)。我为此创建了一个python脚本,该脚本是从Google Cloud Shell(或本地计算机Shell)运行的。客户端python脚本向TRIGGER Pub / Sub主题发布861条消息,该消息同时触发了多个Cloud Function,每个函数都在范围[0,860]中传递了唯一的taskID。然后,客户端python脚本以“同步提取”方式轮询RESULTS Pub / Sub主题,以查找任何消息。执行任务后,Cloud Function将使用唯一的taskID和计时详细信息将消息发布到RESULTS Pub / Sub主题。客户端使用此唯一的taskID来标识消息来自哪个任务。它还有助于识别被丢弃的重复消息。
基本步骤:
问题:当客户端从RESULTS Pub / Sub主题轮询消息时,我没有收到所有taskID的消息。我确定Cloud Function已被调用并正确执行(我在Google存储桶中有861个结果)。我重复了几次,每次都发生。奇怪的是,每次运行时丢失的taskID的数量都会更改,并且不同的taskID也会丢失。我还跟踪收到的重复taskID的数量。表中给出了5次独立运行所接收,丢失和重复的唯一taskID的数量。
SN # of Tasks Received Missing Repeated
1 861 860 1 25
2 861 840 21 3
3 861 851 10 1
4 861 …Run Code Online (Sandbox Code Playgroud)