RabbitMQ接触(二)

上篇我们讲了生产者如何创建一条message到rabbitmq-server之中,如果设置了durable,那么这条消息会持久化到磁盘,那么如果都把消息持久化到磁盘,那么消息越来越多的化,岂不是磁盘会爆满,会导致系统崩掉??一般公司里面一些业务场景都是会设置消息持久化的(这里说的消息其实包含了exchange和队列queue的).那么这些消息如何移除呢?

  1. 当生产者设置了确认机制ack,生产通过exchange一条持久化消息时,消费者接收队列中的消息并处理,这时候消费者必须要手动发送确认给rabbitm-server,这时候这条消息会自动在rabbit-server中删除.但如果没有确认,那么这条消息会一直留在队列,也就是消费者会一直需要处理.因此要注意的一点是持久化属性必须要和ack一起用.

上面只是说了下公司应用rabbitmq的一些方式

接下来还是主要讲spring-amqp接收消息.

CachingConnectionFactory factory=new CachingConnectionFactory();
factory.setAddresses("localhost:5672");
factory.setUsername("guest");
factory.setPassword("guest");
factory.setChannelCacheSize(1);
template=new RabbitTemplate(factory);
template.setMessageConverter(new Jackson2JsonMessageConverter());
template.setQueue("qingting-queue");

首先初始化链接也是需要如上配置的.

配置之后,接收消息

template.receiveAndConvert()

因为我们设置了json转换器,因此使用改方法接收并直接转换为对象,当然我们也可以使用receive来接收.

但是要注意的是这个接收必须手动调用方法才能接收到消息,因此,我们可以直接

while (true){
   Object object=template.receiveAndConvert()
}

这时候我们就可以实时收到消息了.当然我们也可以使用线程去处理.



你可能感兴趣的:(java,spring,rabbitmq,AMQP)