RabbitMQ杂记3

  1. 其他代码和简单队列一致,但是消费者不一样。channel.basicQos可以控制消费者从队列中获取消息的能力,只要达到了这个值数量的消息未被ack,则不再给这个消费者发送消息,这个可以控制机器的消费能力,可以看到开了线程休眠的明显获取数据能力要比没开的弱很多。
public void getRabbitMessage1() throws IOException {
    logger.info("消息监听器初始化成功");
    Connection connection = RabbitConnectUtils.getRabbitConnection();
    Channel channel = connection.createChannel();
    // 声明队列
    channel.queueDeclare(HELLO_QUEUE, false, false, false, null);
    channel.basicQos(10);
    // 定义队列的消费者
    // 监听队列
    Consumer consumer = new DefaultConsumer(channel) {
        @Override
        public void handleDelivery(String consumerTag,
                                   Envelope envelope,
                                   AMQP.BasicProperties properties,
                                   byte[] body) throws IOException {
            String message = new String(body, "UTF-8");
            try {
                Thread.sleep(10);
                logger.info("[x] receve:{}", message);
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                //手动回复一次
                channel.basicAck(envelope.getDeliveryTag(), false);
            }
        }
    };
    // 自动回复确认,默认为true,生产者已发送就会将其标记为:已删除
    channel.basicConsume(HELLO_QUEUE, false, consumer);
}


你可能感兴趣的:(MQ相关)