扩大/缩小我正在监听多个队列的微服务

Posted

技术标签:

【中文标题】扩大/缩小我正在监听多个队列的微服务【英文标题】:Scaling up/down my microservice which is listening to multiple queues 【发布时间】:2021-11-20 01:45:45 【问题描述】:

我必须构建一个微服务来监听多个队列、读取消息并将它们插入数据库。可以有 1000 个队列。如果有人可以提供帮助,那将是扩大和缩小服务规模的最佳和干净的方式。如何使用 docker 动态传递队列名称,例如,service1 只会监听 queue1 和 queue2,而在负载增加后,另一个服务实例启动,它将监听 queue3 并处理其消息?每个队列都是独立的,应该按顺序处理。基本上,您可以考虑如果我们有 100 个客户,我们将有 100 个队列。有时,一个客户的队列会收到更多消息,如果我们可以生成一个新实例并将该客户 ID 队列分开,以便在不同的服务上进行处理,那么对于该客户来说会更快。随着负载的减少,一项服务可以处理所有队列。 另外,有什么方法可以动态传递队列以侦听/从服务绑定中删除而无需重新启动?

【问题讨论】:

为什么队列有上千个,服务实例数量相对较少?这似乎颠倒了。 只是示例数字。寻找有关如何根据队列数量进行扩展的选项。一个消费者应该从同一个队列中读取消息,因为消息应该是有序消费的。从所有队列中读取的 Spring 应用程序应该很容易,但唯一的问题是试图找到一个答案,即该服务将如何根据队列的数量进行扩展。对于前 10 个队列正在被一个服务监听,接下来的 10 个队列被另一个实例监听。稍后,如果我想减少一个实例处理的队列数量,假设为 5。它不需要重新启动。 【参考方案1】:

问题只是如何告诉服务要处理哪些队列?

您如何创建一项服务来监控队列和队列大小并决定何时以及为哪些队列启动或停止某个工作实例?该服务可以为每个工作实例提供一个 URL 作为参数。在这个 url 上,worker 可以找到关于要处理哪些队列的附加信息。

【讨论】:

以上是关于扩大/缩小我正在监听多个队列的微服务的主要内容,如果未能解决你的问题,请参考以下文章

几种常见的微服务架构方案简述——ZeroC IceGridSpring Cloud基于消息队列

几种常见的微服务架构方案——ZeroC IceGridSpring Cloud基于消息队列Docker Swarm

具有共享数据库的微服务?使用多个 ORM? [关闭]

如何连接不同的微服务应用?

单个数据摄取服务与多个单独的微服务? [关闭]

使用 Docker Compose 的微服务:同一个容器,多个项目