一、添加配置
spring:
rabbitmq:
listener:
type: direct
direct:
acknowledge-mode: manual #手动模式
prefetch: 5 #每秒处理5条请求
二、添加代码
package com.wayne.listener;
import com.rabbitmq.client.Channel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.rabbit.listener.api.ChannelAwareMessageListener;
import org.springframework.stereotype.Component;
import static com.wayne.core.config.RabbitConfig.QUEUE_NAME;
@Slf4j
@Component
public class QosListenser implements ChannelAwareMessageListener {
@Override
@RabbitListener(queues = QUEUE_NAME)
public void onMessage(Message message, Channel channel) throws Exception {
Thread.sleep(1000);
long deliveryTag = message.getMessageProperties().getDeliveryTag();
//1.接收转换参数
log.info(new String(message.getBody()));
//2.接收业务处理
log.info("业务处理");
//3.手动签收
/**
* deliveryTag:发送状态
* multiple:允许多条消息同时被签收
*/
//限流模式必须要手动确认,这里注释,只是为了学习用
//channel.basicAck(deliveryTag,true);
}
}
三、测试结果
测试结果如下
原消息队列中有10条数据
prefetch为1时
prefetch为5时