向新订阅者推送消息
Pushing messages to new subscribers
我正在使用 spring-boot 创建一个批量视频处理系统。在这里,用户将通过 xlsx sheet 提供所有视频相关信息,我们将在后端处理视频。我正在使用 Rabbitmq 来排队请求。
假设一个用户上传了一个有 100 行的 sheet,那么 Rabbitmq 队列中将有 100 条消息。在后端,我们正在自动扩展订阅者(服务器)。因此,我们将从仅一个订阅者开始,并根据负载(队列中的消息数)扩展到 15 个订阅者。
但是我们的生产者非常快,它将所有消息分配给我们的第一个订阅者(在其他订阅者出现之前)并且我们所有的新订阅者都没有从队列中获取任何消息。
如果在生产者开始推送消息之前所有订阅者都可用,那么它会将消息分配给所有服务器。
请提供一个解决方案,说明我们的新订阅者如何从队列中提取先前生成的消息。
您可能受到侦听器容器的影响 prefetchCount
属性 - 最新版本(自 2.0 起)默认为 250。
因此第一个消费者在启动时最多会收到 250 条消息。
听起来你应该把它减少到一个小数字,甚至一直减少到 1,这样每个消费者只有一条消息是突出的。
我正在使用 spring-boot 创建一个批量视频处理系统。在这里,用户将通过 xlsx sheet 提供所有视频相关信息,我们将在后端处理视频。我正在使用 Rabbitmq 来排队请求。 假设一个用户上传了一个有 100 行的 sheet,那么 Rabbitmq 队列中将有 100 条消息。在后端,我们正在自动扩展订阅者(服务器)。因此,我们将从仅一个订阅者开始,并根据负载(队列中的消息数)扩展到 15 个订阅者。 但是我们的生产者非常快,它将所有消息分配给我们的第一个订阅者(在其他订阅者出现之前)并且我们所有的新订阅者都没有从队列中获取任何消息。 如果在生产者开始推送消息之前所有订阅者都可用,那么它会将消息分配给所有服务器。
请提供一个解决方案,说明我们的新订阅者如何从队列中提取先前生成的消息。
您可能受到侦听器容器的影响 prefetchCount
属性 - 最新版本(自 2.0 起)默认为 250。
因此第一个消费者在启动时最多会收到 250 条消息。
听起来你应该把它减少到一个小数字,甚至一直减少到 1,这样每个消费者只有一条消息是突出的。