我们的系统有一群使用者,他们使用兔子来为长期运行的任务使用消息。目前,我们在处理结束时进行编码,这样如果使用者崩溃,消息就会被请求。我们想要的是,使用者一次只处理一条消息,而不预取一条消息,这样另一种使用者就可以处理下一条消息,如果出现崩溃,我们就没有请求,但是我们有自己的监视器,它将决定我们是否需要在更大的EC2实例上重新运行。看起来,我们可以在处理开始时以1的预取来接近这一点,但是队列中仍然有一条消息可以由另一个使用者处理。显然,根据兔子开发者的说法,将预取设置为0是没有意义的(我不明白为什么),所以另一种选择是只在完成时才继续进行预取,这样就不会发生预取,但在崩溃时却不知何故不需要。
如果我们正游向上游,那么我知道我们必须想出另一个计划,但我不明白为什么消费者一次只做一件事情(而不是预购下一件工作)和不要求坠机的愿望是如此的奇怪。
发布于 2022-03-01 18:44:40
考虑使用RabbitTemplate、receive()或receiveAndConvert方法之一;这是这种工作负载类型的更好的模型--根据需要获取记录,而不是将它们推送到应用程序中。
https://stackoverflow.com/questions/71271870
复制相似问题