Rabbitmq提供qos功能,在一定数量的信息未被ack或nack时,不消费新的消息。
void basicQos(int prefetchSize, int prefetchCount, boolean global) throws IOException;
prefetchSize:每个消息体最大字节数
prefetchCount:每次消费的消息个数,告诉RabbitMQ不要一次性推送多个消息。
global:是作用到channel上还是consumer
p
r
e
f
e
t
c
h
S
i
z
e
和
g
l
o
b
a
l
R
a
b
b
i
t
M
Q
没
有
实
现
\color{#FF0000}{prefetchSize和global RabbitMQ没有实现}
prefetchSize和globalRabbitMQ没有实现
如果消息入队是设置的为手工签收,消费端没有确认,消费者断开了连接,那么将回重新入队,该消费者将不会继续消费下一条消息。
Spring整合RabbitMq配置消息
#最小线程数-一个线程对应一个channel
spring.rabbitmq.listener.simple.concurrency=10
spring.rabbitmq.listener.simple.max-concurrency=15
spring.rabbitmq.listener.simple.acknowledge-mode=manual
#broken推送的消息个数,如果没有ack或nack,那么将不会推送到该channel中
spring.rabbitmq.listener.simple.prefetch=4
定义了每个消费者并行消费线程数为10,即10个channel,每个channel未被ack和nack消息个数未4个。
RabbitMQ消息端消费出现异常时可考虑重新入队
void basicNack(long deliveryTag, boolean multiple, boolean requeue)
throws IOException;
requeue设置为true即可