Camel RabbitMQ连接器在使用之前会读取数千条消息
在我的应用程序中,我们使用驼峰路由从RabbitMQ队列读取消息。 配置如下所示:Camel RabbitMQ连接器在使用之前会读取数千条消息,rabbitmq,apache-camel,Rabbitmq,Apache Camel,在我的应用程序中,我们使用驼峰路由从RabbitMQ队列读取消息。 配置如下所示: from("rabbitmq:myexchange?routingKey=mykey&queue=q") 制作人可以在几分钟内发送50k条消息,每条消息的处理可能需要1秒或更长时间 我所看到的是,所有的消息都被消耗得非常快,但处理这些消息可能需要很多小时。预计会有很多小时的处理,但这是否意味着50k消息会存储在内存中?如果是这样,我想禁用此行为,因为我不想在进程停止时丢失消息。。。事实上,我们正在丢失大
from("rabbitmq:myexchange?routingKey=mykey&queue=q")
制作人可以在几分钟内发送50k条消息,每条消息的处理可能需要1秒或更长时间
我所看到的是,所有的消息都被消耗得非常快,但处理这些消息可能需要很多小时。预计会有很多小时的处理,但这是否意味着50k消息会存储在内存中?如果是这样,我想禁用此行为,因为我不想在进程停止时丢失消息。。。事实上,我们正在丢失大部分消息,即使进程保持正常,这更糟糕。看起来连接器的设计不是为了一次处理这么多消息,但我不能说这是因为连接器本身还是因为我们没有正确配置它
我尝试了自动确认选项:
from(“rabbitmq:myexchange?routingKey=mykey&queue=q&autoAck=false”)
这样,当出现问题时会回滚消息,但同时保持50k条消息未确认似乎不是一个好主意…我想与大家分享几件事
在某种程度上,它在架构上就像一个缓冲区。如果您的进程在处理这些消息时停止,则在进程停止之前未确认的任何消息仍将在队列中,消费者将再次获取该消息进行处理。事实上,在autoAck=false和prefetchCount=1的情况下,该消息看起来与我希望的一样工作。我尝试了这些参数中的每一个,但从未同时尝试过。我会尽快在一台真正的服务器上进行测试。工作非常出色!也许这种配置对于吞吐量来说不是最好的,但是我们的处理速度很慢,它不会改变整体性能。