消息中间件-rocketmq 如何保证服务的稳定性
对于一个消息中间件来说,无非从三个方面去看它的稳定性
- 消息投递
- 消息存储
- 消息消费
首先对于消息投递来说, rocketmq内部是有消息的重试机制,在一定重试次数和超时时间内 都可以进行重试。当然如果内部的重试还不能解决问题,就需要我们业务上来进行手动重试, 比如将消息先写入数据库,给定一个状态,当消息投递成功后,修改状态等。。。
其次对于消息存储来说, rocketmq采用等是主从模式, 可以设置 master +多个slave 来保证高可用, 数据刷盘有两种模式 一个是 异步复制, 这种方式没办法保证实时同步, 但是不会阻塞。另一个是同步双写, 同时写master和slave 这样虽然耗费更多时间,但是能保证 更快的同步消息,当有至少一个slave 返回确认的ack之后, 就会返回消息投递成功给客户端, 当然master 也是可以 部署多个 保证服务
最后 消息消费,rocketmq采取的是 至少消费一次的规则, 也就是必须手动的提交才会认为这条消息消费成功,当然在业务上我们也需要保证消费的幂等性