Kubernetes Google容器引擎中的异步任务队列

Kubernetes Google容器引擎中的异步任务队列,kubernetes,google-kubernetes-engine,Kubernetes,Google Kubernetes Engine,我正试图找到一种可移植的方法,在我的集群中为google容器引擎开发一个自定义但可扩展的任务队列。这是一个场景,我有一个前端,在我的node js实例中捕获用户详细信息,这些详细信息被发送到api系统,该系统反过来联系db,保存用户详细信息,并希望发送欢迎邮件。 我的问题是我不想使用相同的api端点方法来处理发送的邮件请求,我需要另一个过程来处理这个问题,我该如何处理我的kubernetes基础设施?我需要实现一个发布到另一个容器的系统的发布子类型吗?如果我这样做,这意味着所有订阅都会收到我的更

我正试图找到一种可移植的方法,在我的集群中为google容器引擎开发一个自定义但可扩展的任务队列。这是一个场景,我有一个前端,在我的node js实例中捕获用户详细信息,这些详细信息被发送到api系统,该系统反过来联系db,保存用户详细信息,并希望发送欢迎邮件。
我的问题是我不想使用相同的api端点方法来处理发送的邮件请求,我需要另一个过程来处理这个问题,我该如何处理我的kubernetes基础设施?我需要实现一个发布到另一个容器的系统的发布子类型吗?如果我这样做,这意味着所有订阅都会收到我的更新通知,但如果我有两个运行子系统的实例,这意味着他们都会观察到更改和发两次信。如果您对此有任何想法或想法,我们将不胜感激

我认为有两种合理的方法来解决这个问题

1:有一个通过API接收邮件事件并在接收后立即返回以异步处理邮件的服务。使用kube服务,您将只点击一个这样的服务,一封邮件将以非阻塞方式发送给呼叫服务,但它有缺点-即,如果出现故障,邮件可能根本不会生成


2:我会选择一些MQ(可能是Kafka、Rabbit等),让任意数量的邮件服务实例占用消息队列,确保只有一个实例可以拾取消息,并要求对消息进行ack,或者在N分钟内没有ack时将其返回到处理中

确保只有一个实例可以拾取消息,如果N分钟内没有ack,则需要消息的ack或将其返回处理。由于实例都订阅同一主题,您如何确保实例只拾取一个。这是否意味着我必须始终只让订阅服务器的一个实例运行?在不同的代理中,它的名称不同,但一般来说,我知道的所有代理都支持以一种方式传递消息,即您有多个消费者,并且唯一的消息只传递给一个消费者。我正在考虑在api层上使用线程池来减少开销。您能提供一个参考吗?