spring cloud stream 集成 Rabbit-mq 记录
公司最近打算把消息队列用起来,就让我开始研究了一下,结合公司里的spring cloud alibaba技术栈,通过 spring cloud stream,来集成rabbit-mq。
1.安装ErLang,安装包:
https://erlang.org/download/otp_win64_23.2.exe
安装完成后需要添加环境变量(以实际路径为准):
ERLANG_HOME=D:\Program Files (x86)\erl-23.2 Path=%ERLANG_HOME%\bin
cmd窗口下输入 erl 查看是否安装完成,下图表示安装完成:

2.安装RabbitMq,绿色解压包
解压完成后需要添加环境变量(以实际路径为准):
RABBITMQ_SERVER=D:\Program Files (x86)\rabbitmq_server-3.8.11 Path=%RABBITMQ_SERVER%\sbin
进入在解压目录下的sbin目录输入cmd进入命令行:

输入命令安装插件:
2.1管理插件:
rabbitmq-plugins enable rabbitmq_management
2.2延迟消费插件:
该插件可能会安装失败,需要去官网把插件下到本地 D:\Program Files (x86)\rabbitmq_server-3.8.11\plugins 目录下再安装:
rabbitmq-plugins enable rabbitmq_delayed_message_exchange

2.3移动消息插件:
rabbitmq-plugins enable rabbitmq_shovel rabbitmq_shovel_management

最后sbin目录下双击rabbitmq-server.bat启动:

启动完成后再访问:

输入默认账号密码:guest/guest 登录进入后台
安装完成
开始写理论东西:
rabbitmq 的消息传递模型是:
生产者--> 交换机 --> 队列 --> 消费者;
交换机和队列都是rabbitmq服务中的概念,其中交换机不能存储消息,消息只能存储在队列中。
如何保证消息不丢失呢?
从生产者到交换机,
交换机到队列,
队列到消费者,
这几个步骤都有可能搞丢消息,
从生产者到交换机,这个一般是rabbitmq服务down掉了,无法发送消息,就需要业务代码在事务中,rabbitmq服务down掉之后,尝试发送消息时会出现连接异常,就可以回滚事务了。
从交换机到队列,这个没有什么好办法,只有一个笨办法,就是每次新建一个队列的时候都检查一下队列是否创建成功,交换机和队列的绑定关系是否正确,发送到交换机的消息是否能正确的分发到队列。
队列到消费者,每次消费者从队列读取消息的时候不要读取完消息之后就立马吧消息从队列中移除,而是在消费者成功的把消息消费成功之后再手工确认消息消费成功,这时队列才会把消息移除,就是开启手工确认的特性即可;
但是一定要确保代码中会进行手工确认,否则队列中的消息会卡死,一直不被消费。

浙公网安备 33010602011771号