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