美文网首页
4.RabbitMQ客户端开发(3)

4.RabbitMQ客户端开发(3)

作者: 12点前睡觉hhh | 来源:发表于2019-05-28 11:28 被阅读0次

    1.消费者的确认与拒绝

    为了确保消息从队列可靠地到达消费者,RabbitMQ提供了消息确认机制。消费者在使用basicConsume方法订阅队列时,可以指定autoAck参数,当Ack为false时,RabbitMQ会等待消费者显式地回复确认信号然后才从内存中移除消息(实质上是先打上删除标记,之后删除)。当Ack为true时,RabbitMQ会自动把发送出去的消息置为确认,然后从内存中删除,不管消费者是否真正消费到了消息。
    当autoAck设置为false,对于RabbitMQ服务端而言,将消息分成了两部分:等待发送给消费者的消息;已经发送给消费者但是还没有收到消费者确认信号的消息。


    image.png

    其中,Ready为等待发送给消费者的消息
    Unacked已经发送给消费者但是还有收到消费者确认信号的消息。
    消费者收到消息后,可以使用channel.basicAck 来向RabbitMQ发送确认信号,也可以使用basicReject来告诉RabbitMQ拒绝这个消息。

    //确认
    void basicAck(long deliveryTag, boolean multiple) throws IOException;
    //拒绝
    void basicReject(long deliveryTag, boolean requeue) throws IOException;
    //批量拒绝
    void basicNack(long deliveryTag, boolean multiple, boolean requeue)
                throws IOException;
    

    参数说明:
    deliverTag 表示消息的编号,可以通过getEnvelope().getDeliveryTag()获取
    requeue:如果requeue设置true,则RabbitMQ会重新将这条消息存入队列,以便发送给下一个订阅的消费者;如果为false,则将它从队列中移除。

    2.关闭连接

    在应用程序使用完连接和通道之后,需要关闭连接,释放资源
    channel.close();
    connection.close();
    显示地关闭channel并不是必需的,因为在Connetcion关闭的时候,channel也会自动关闭。

    相关文章

      网友评论

          本文标题:4.RabbitMQ客户端开发(3)

          本文链接:https://www.haomeiwen.com/subject/ursrtctx.html