spring cloud stream 集成 Rabbit-mq 记录

  公司最近打算把消息队列用起来,就让我开始研究了一下,结合公司里的spring cloud alibaba技术栈,通过 spring cloud stream,来集成rabbit-mq。

 

 

 

开始写理论东西:

 

rabbitmq 的消息传递模型是:

 

生产者--> 交换机 --> 队列 --> 消费者;

 

交换机和队列都是rabbitmq服务中的概念,其中交换机不能存储消息,消息只能存储在队列中。

 

如何保证消息不丢失呢?

从生产者到交换机,

交换机到队列,

队列到消费者,

这几个步骤都有可能搞丢消息,

 

从生产者到交换机,这个一般是rabbitmq服务down掉了,无法发送消息,就需要业务代码在事务中,rabbitmq服务down掉之后,尝试发送消息时会出现连接异常,就可以回滚事务了。

 

从交换机到队列,这个没有什么好办法,只有一个笨办法,就是每次新建一个队列的时候都检查一下队列是否创建成功,交换机和队列的绑定关系是否正确,发送到交换机的消息是否能正确的分发到队列。

 

队列到消费者,每次消费者从队列读取消息的时候不要读取完消息之后就立马吧消息从队列中移除,而是在消费者成功的把消息消费成功之后再手工确认消息消费成功,这时队列才会把消息移除,就是开启手工确认的特性即可;

但是一定要确保代码中会进行手工确认,否则队列中的消息会卡死,一直不被消费。

 

posted @ 2021-03-07 15:31  yuhuizhao  阅读(217)  评论(0)    收藏  举报