Google Cloud 上使用 Pub/Sub 的主/从模式

Posted

技术标签:

【中文标题】Google Cloud 上使用 Pub/Sub 的主/从模式【英文标题】:Master/Slave pattern on Google Cloud using Pub/Sub 【发布时间】:2015-05-30 17:43:45 【问题描述】:

我们想在 Google Cloud 上构建一个主从模式。 我们计划为此使用 Pub/Sub(类似于 JMS 模式)让每个工作人员从队列中获取任务并在完成后确认。

但是,订阅者似乎无法在开始之前收到发送的消息。 而且我们不确定如何确保每条消息都由单个“从属”处理。

有办法吗?或者谷歌云上的另一种机制?

【问题讨论】:

据我了解的主从模式,从属并行执行任务,主收获结果。我会创建一个主题用于对任务进行排队,以及附加到该主题的单个订阅,以便所有从属服务器都使用此订阅来获取任务。顺便说一句,恐怕我不明白以下内容: > 我们不确定如何确保每条消息都由单个“从属”处理。你能详细说明一下吗? 【参考方案1】:

据我了解的主从模式,从属并行执行任务,而主收获结果。我会创建一个主题用于对任务进行排队,并为该主题附加一个订阅,以便所有从属设备都使用此订阅来获取任务。

另外,我会创建另一个主题/子对,用于从奴隶发布结果,然后主人收获结果。或者,可以将结果存储到 Cloud Datastore 等共享数据存储中。

【讨论】:

【参考方案2】:

您可以通过创建所有从属服务器都使用的“单一”订阅来做到这一点。 pubsub 服务只向给定订阅发送一次新消息,因此您可以确保给定消息将仅由 1 个从属设备处理。

您还可以适当调整确认截止日期,以免发生重试。如果重试发生,它将导致多个从站收到相同的消息。

【讨论】:

以上是关于Google Cloud 上使用 Pub/Sub 的主/从模式的主要内容,如果未能解决你的问题,请参考以下文章

Google Cloud Functions 无法使用 Pub/Sub 死信主题

如何使用 Google Cloud Pub/Sub 进行 Junit 测试

Google Cloud Pub/Sub - Cloud Function & Bigquery - 数据插入未发生

Google Cloud Pub/Sub,使用 HTTP PUSH 请求发布

google cloud pub sub中两个主题之间的消息传输

Google PubSub 模拟器是不是可以与 Google Cloud Pub/Sub API 客户端库一起使用?