Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform 由云PubSub重复消息触发的云功能_Google Cloud Platform_Google Cloud Functions_Google Cloud Pubsub - Fatal编程技术网

Google cloud platform 由云PubSub重复消息触发的云功能

Google cloud platform 由云PubSub重复消息触发的云功能,google-cloud-platform,google-cloud-functions,google-cloud-pubsub,Google Cloud Platform,Google Cloud Functions,Google Cloud Pubsub,我正在尝试使用云函数作为由PubSub触发的异步后台工作程序,并做更长的工作(以分钟为单位)。 完整的代码在这里 我的原型将数据插入BigQuery并等待几分钟(以模拟更长的任务)。 我正在向PubSub主题发布100条消息(间隔1秒) 有人强调,PubSub可以多次传递相同的消息,但我很惊讶,100个消息中有10到40个是重复的。CF的响应时间分别为5、6、7分钟。在4分钟的回复中,我没有注意到重复的内容。 我在同一时间间隔内做了多次测试。接收第一条和第二条信息之间的时间差在30到600秒之间

我正在尝试使用云函数作为由PubSub触发的异步后台工作程序,并做更长的工作(以分钟为单位)。 完整的代码在这里

我的原型将数据插入BigQuery并等待几分钟(以模拟更长的任务)。 我正在向PubSub主题发布100条消息(间隔1秒)

有人强调,PubSub可以多次传递相同的消息,但我很惊讶,100个消息中有10到40个是重复的。CF的响应时间分别为5、6、7分钟。在4分钟的回复中,我没有注意到重复的内容。
我在同一时间间隔内做了多次测试。接收第一条和第二条信息之间的时间差在30到600秒之间

文档中提到“云发布/订阅可以发送重复的消息。例如,当您在消息确认截止日期之前未确认消息时,云发布/订阅将重新发送消息。”对于云功能订阅,确认截止日期为600秒(10分钟),根据我的理解,这不应该是原因

可能我的测试用例是特定的,或者可能还有其他东西。

对于如何处理这种情况以及这是否正常或如何防止重复(不包括数据流)的建议,我将不胜感激。

有一个问题会影响2019年1月之前部署的云功能,导致运行时间超过5分钟的功能的重复触发率增加。请尝试删除并重新部署您的函数以解决此问题。

云函数也可以为任何类型的触发器复制事件,因此您的函数确实应该期望通过幂等方式接收重复的事件。除HTTP触发器外的所有触发器。例如,HTTP函数最多调用一次,而后台函数(pubsub或任何其他触发器)至少调用一次。感谢您的评论和澄清。这里有一条很好的评论,标题是“如何检测重复消息?”。我认为一种常见的技术是使用廉价的全局数据存储(redis/memcache)并保存处理的每条消息的消息id。在处理新邮件之前,请检查您以前是否在缓存中见过它。谢谢,@Kolban。Redis/memcache方法应该可以工作,但对于非频繁、小规模的使用,这可能有点过头了。我想这总是取决于用例。我只是很惊讶我看到了高比例的重复。谢谢你的评论。该功能是几天前部署的。无论如何,因为云任务现在支持作为任务工作者的云功能,所以这种方法更适合我的情况。