我们一般就是代码中便也while循环,进行consumer.nextDelivery()
方法进行获取下一条,然后进行消费处理!
但是我们使用自定义的Consumer更加的方便,解耦性更加的强,也是实际工作中最常见的使用方式!
// ---- 方式二 推荐 ----
// 5.创建消费者, 用来处理消息
com.rabbitmq.client.Consumer consumer = new DefaultConsumer(channel) {
// 第一参数:consumerTag 同一个会话, consumerTag 是固定的 可以做此会话的名字, deliveryTag 每次接收消息+1,可以做此消息处理通道的名字。
// 因此 envelope.deliveryTag 可以用来回传告诉 rabbitmq 这个消息处理成功 清除此消息(basicAck方法)。
// 第二个参数: envelope 表示消息类型信息
// 第三个参数:properties 表示消息路由头的其他属性等
// 第三个参数: body 消息内容
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
// 获取到消息后的消息处理
String message = new String(body,"UTF-8");
System.out.println("消费端-接收到的消息:" + message);
}
};
// 6.设置channel
// queue 表示要监听的队列
// autoAck 是否自动发送签收消息(也就是如果我收到消息了,我就自动发送一个消息确认通知)
channel.basicConsume(queueName, true,consumer);
网友评论