消费者介绍
消息的消费者,表示一个从消息队列中取得消息的客户端应用程序多消费者订阅第一个队列,队列会以轮询的方式分发消息
消费者获得消息的2种方式
拉取Get(避免使用)推送Consume(常用的)
消息确认机制(ACK机制)
为了保证消息从队列可靠的到达消费者分为自动ACK和手动ACK有一个autoAck的参数autoAck等于true的时候RabbitMQ只要把消息发送给了消费者就删除消息,不管消费者有没有接收到autoAck等于false的时候RabbitMQ把消息发送给消费者后等待信号才删除ack一般都是手动的
消息的拒绝
消费者在接收到消息后可以选择拒绝接收拒绝的方式有两种(Reject,Nack)Reject只能一条一条的拒绝消息Nack可以一次性拒绝多条消息
消息的重新投递
当消费者拒绝消费该消息时,如果允许重新投递那么消息会重新回到队列中,如果不允许则会丢失该消息使用 requeue参数=true 来允许重新投递消息不会因为被拒绝而不向消费者推送一个消息可能会被同一个消费者拒绝好几次
消费端限流(QOS)
为什么要做消费端限流
如果RabbitMQ中有上万条未处理的消息,我们随便打开一个消费者客户端,可能会导致服务器崩溃等问题
什么是QOS
RabbitMQ提供了一种qos(服务质量保证)功能,即在非自动确认消息的前提下,如果一定数目的消息未被确认前,不进行消费新的消息,有两种级别:consumer,channel,通过basicQos方法进行设置
basicQos参数详解
prefetchSize—— 消息大小的限制比如是多少兆,一般设置为0不做限制prefetchCount—— 一次最多多少条数据,一般设置为1,如果设置为1就是如果1条消息还没有ACK则消费者阻塞直到这一条消息ACKglobal——这个限流策略应用于当前消费者还是整个信道,一般为false只应用于消费者