Google Cloud Functions触发器 - http和触发器 - 主题意外地同步运行

时间:2018-02-05 19:07:32

标签: asynchronous google-cloud-storage google-cloud-functions google-cloud-pubsub

我对运行此设置时看到的内容感到困惑:

  • FuncA:Google Cloud Function trigger-http
  • FuncB:Google云端功能触发器主题

FuncA由HTTP客户端调用。在被调用时,FuncA做了一些轻松的工作,设置了一个描述要执行的任务的JSON对象,并将此JSON存储到Google云存储中。当文件被写入时,FuncA发布了一个带有指向gs文件的指针的主题。此时,FuncA响应客户端并退出。持续时间通常为1-2秒。

FuncB被告知某个主题已发布并被调用。任务JSON被拾起并且工作了。处理完FuncB后,存储结果信息Firebase实时数据库。 FuncB此时退出。持续时间通常为10-20秒。

由于FuncA和FuncB没有关联,所以将它们各自的进程生命周期放在不同的函数名称(和触发器)上,并且只通过pub / sub主题消息传递(从A到B的单向)共享通信,我们期望FuncA可以反复运行,无论如何都可以发布主题。 FuncB应该被触发并扇出以随着调用FuncA的速度而扩展。

但事实并非如此。

在日志中,我们看到遵循此模式的结果:

  • 10:00:00.000 FuncA:函数执行已开始
  • 10:00:02.000 FuncA:函数执行耗时2000毫秒,状态结束:'ok'
  • 10:00:02.500 FuncB:函数执行开始
  • 10:00:17.500 FuncB:函数执行耗时15000毫秒,结束状态:'ok'
  • 10:00:18.000 FuncA:函数执行已开始
  • 10:00:20.000 FuncA:函数执行耗时2000毫秒,状态结束:'ok'
  • 10:00:20.500 FuncB:函数执行已开始
  • 10:00:35.500 FuncB:函数执行耗时15000毫秒,完成状态:'ok'
  • ...

客户端调用FuncA显然会等待FuncA和FuncB完成,然后才能通过下一个请求。预计FuncA会完成,并允许在呼叫客户端可以“投掷”的任何速度立即进行新的呼叫。

使用更多线程来增强客户端只会重复此模式,以便对FuncA-> FuncB的“配对”调用始终等待彼此。

Dicsuss,澄清,... stackoverflow,做你的魔法! : - )

提前致谢。

0 个答案:

没有答案