轮询消费消息指的是轮流消费消息,每个工作队列都会获取一个消息进行消费,并且获取的次数按照顺序依次往下轮流。即为公平分发。
模拟案例
获取信道
public class RabbitMQUtils {
public static Channel getChannel() throws IOException, TimeoutException {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("127.0.0.1");
factory.setUsername("admin");
factory.setPassword("admin");
Connection connection = factory.newConnection();
return connection.createChannel();
}
}
消费者
public class Work01 {
//队列的名称
public static final String QUEUE_NAME="hello";
public static void main(String[] args) throws IOException, TimeoutException {
Channel channel = RabbitMQUtils.getChannel();
DeliverCallback deliverCallback = (consumerTag,message)->{
System.out.println("收到的信息为:"+new String(message.getBody()));
};
CancelCallback cancelCallback = consumerTag ->{
System.out.println(consumerTag+"消息被消费者取消消费接口回调逻辑");
};
channel.basicConsume(QUEUE_NAME,deliverCallback,cancelCallback);
}
}
配置idea允许多线程方式运行main
启动两个消费者
生产者
public class Task01 {
//队列名称
public static final String QUEUE_NAME="hello";
public static void main(String[] args) throws IOException, TimeoutException {
Channel channel = RabbitMQUtils.getChannel();
channel.queueDeclare(QUEUE_NAME,false,false,false,null);
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()){
String message = scanner.next();
channel.basicPublish("",QUEUE_NAME,null,message.getBytes());
System.out.println("消息发送完成:"+message);
}
}
}