简介
ActiveMQ的设计目标是成为一个高性能的消息总线。这意味着使用SEDA架构可以异步执行尽可能多的工作。 为了有效利用网络资源,Broker利用“推送”模型向消费者发送消息。 这可确保消费者始终拥有准备处理的消息的本地缓冲区。 替代方案是让消费者明确地从Broker那里提取消息。 单独提取消息不是非常有效,并且会增加每个消息的延迟。
但是,在不限制推送给消费者的消息数量的情况下,客户端的资源可能会被耗尽。因为消息消费通常比消息发送慢的多。为了避免这种情况,ActiveMQ使用预取限制(Prefetch Limit)来限制可以一次发送给单个消费者的最大消息数。消费者依次使用预取限制来调整其预取消息缓冲区的大小。
一旦broker向消费者发送了预取数量的消息,它将不会再向该消费者发送任何消息,直到消费者至少确认了50%的预取消息,比如prefetch size / 2。当broker收到确认后,它将向消费者发送prefect size一半的消息,以填充消费者的本地缓冲区。注意,可以为每个消费者指定预取消息数量。
在数据量较大的情况下,建议使用较大的预取值。但是,对于数据量较小的情况,每个消息需要很长时间处理,预取值应该设置为1.这可以保证消费者一次只处理一条消息。但是,将预取值设置为0将导致消费者每次轮询一条消息,而不是将消息推送给消费者。
- 何为慢速消费者?
一个消费者当前待处理的消息数量达到配置的prefetch size的2倍以上,那么该消费者就是慢速消费者。
指定Prefect策略
你可以在ActiveMQConnectionFactory或ActiveMQConnecti