RabbitMQ的功能实现

来源:互联网 发布:apache mina框架 编辑:程序博客网 时间:2024/05/21 10:56

1.消息通知
        因为queue的默认情况下是给消费者轮流分发消息的。当一个消费者挂了之后,还是会向它发送消息,这样的的话,就会造成消息的丢失。为了解决这个问题,RabbitMQ的方案是,设置参数,当消息发送给消费者后,消费者会回应queue。当queue收到信号后,才会把queue中的message删除。

      

boolean autoAck=false;//当autoAck为false的时候,当消费都收到信息后,会回复队列,我收到信息了。这样就不会造成队列的消息流失。channel.basicConsume(QUEUE_NAME, autoAck, consumer);

2.消息持久
       刚刚解决了queue与消费者之间的消息丢失问题,但是如果RabbitMQ挂了,也会把queue中的消息丢失。所以在rabbitMQ要做消息的持久化。当RabbitMQ挂了之后restart,现从硬盘中读取数据。

    设置方案:

      

boolean durable = true;channel.queueDeclare("hello", durable, false, false, null);
    注意:

    当rabbitMQ有名这hello的队列后,就不会更改了。如果更改的话会报错

3.消息失败分发

       当autoACk的值为false的时候,同时consumer也很忙在处理事情。RabbitMQ把消息分发给consumer的话。这样也会造成消息的丢失。那么我们可以通过设置,记RabbitMQ把消息分发给有空的cumsuer

int prefetchCount = 1;channel.basicQos(prefetchCount);


0 0
原创粉丝点击