rabbitmq消费者处理的两种方式
方式一,基于监听的方式
/**
* @Author:
* @description: 消息消费者,对队列A进行监听
* @Param: []
* @Return: org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer
*/
/*@Bean
public SimpleMessageListenerContainer messageContainer() {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory());
container.setQueues(queueA()); //设置队列A
container.setExposeListenerChannel(true);
container.setMaxConcurrentConsumers(5);
container.setConcurrentConsumers(3);
container.setAcknowledgeMode(AcknowledgeMode.MANUAL); //设置确认模式手工确认
container.setMessageListener(new ChannelAwareMessageListener() {
@Override
public void onMessage(Message message, Channel channel) throws Exception {
byte[] body = message.getBody();
System.out.println("队列A接受消息 " + new String(body));
channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); //确认消息成功消费
}
});
return container;
}
方式二,基于注解@RabbitListener的方式
@Component
public class MsgConsumer {
@RabbitListener(queues = RabbitMQConfig.QUEUE_A)
public void process(Message message, Channel channel) {
byte[] body = message.getBody();
String str = "我已接收到队列A的消息,消息内容为:" + new String(body);
try {
channel.basicAck(message.getMessageProperties().getDeliveryTag(),false); //确认消息成功消费
} catch (IOException e) {
e.printStackTrace();
}
}
}