当使用RabbitMQ作为java工作队列时,应该如何处理并发性和暂时性错误?
我正在考虑设置一个RabbitMQ代理来处理java web应用程序的基本任务处理。其基本思想是,生产者是一个web服务器,它希望能够快速处理请求,但也需要进行一些数据处理。为了实现这一点,它知道一些可以序列化为AMQP消息的作业DTO,并且在某个地方有一个消费者知道如何处理这些作业。经典 在阅读了RabbitMQ文档之后,我还有几个问题要问当使用RabbitMQ作为java工作队列时,应该如何处理并发性和暂时性错误?,java,multithreading,rabbitmq,amqp,Java,Multithreading,Rabbitmq,Amqp,我正在考虑设置一个RabbitMQ代理来处理java web应用程序的基本任务处理。其基本思想是,生产者是一个web服务器,它希望能够快速处理请求,但也需要进行一些数据处理。为了实现这一点,它知道一些可以序列化为AMQP消息的作业DTO,并且在某个地方有一个消费者知道如何处理这些作业。经典 在阅读了RabbitMQ文档之后,我还有几个问题要问 我希望消费者应用程序充分利用其CPU来处理消息,我想知道RabbitMQ是否已经提供了工作池。假设我需要4个工作线程,那么在同一个连接上注册4个通道,每个
值得注意的是,除非数据库正在重新启动或其他操作,否则作业通常不会花费超过几秒钟的时间。我感谢任何指导 1a。如果您想要固定数量的工作线程,那么应该打开多个通道,并为每个通道注册一个使用者。RabbitMQ每个通道有一个调度程序线程,因此一个使用者将阻止在同一通道上注册的其他使用者 1b。如果需要动态增长的工作池,那么可以考虑使用(假设您在java中实现)。具体来说,SimpleMessageListenerContainer根据工作负载动态地管理一个不断增长和收缩的消费者池。请参阅《弹簧AMQP参考指南》中的章节 2a。如果您知道工人出现故障,您可以nack,消息将传递给另一个消费者。除非处于“自动确认”模式,否则在消费者确认消息之前,消息不会传递给其他消费者