常见的中间件有哪些,消息中间件有哪些

系统架构中 , 消息中间件起到了什么作用?

常见的中间件有哪些,消息中间件有哪些


【常见的中间件有哪些,消息中间件有哪些】现在大型网站架构技术中 , 有一个高频词就是“消息中间件” , 我们在很多大公司分享的技术PPT或者岗位要求里都会看到这个名词 。什么是消息中间件呢以及它能解决什么问题呢?什么是消息中间件?通过消息中间件可以让不同的系统模块通过传递消息的方式来激活对方的事件以完成相应的操作 。消息中间件本质上也算是一种队列 , 支持同步或异步方式来传输消息 。
一般情况下我们把消息中间件简称为MQ 。消息中间件在架构中发挥了重要作用通过消息中间件可以帮我们解决很多问题 , 比如说:1、系统解耦比如一个用户注册流程 , 可能涉及这些操作:向用户库中写入数据;向相关附加表中写入数据;发送欢迎短信、邮件、站内信等 。在没有使用消息中间件时 , 这些操作可能都是阻塞式的一步一步进行着 , 万一某个环节出现异常后续环节可能就无法进行了 , 这就是典型的高耦合!但当我们引入消息中间件后 , 用户注册成功后只要生产一条消息 , 然后由不同的消费者(模块)去消费(执行特定操作) , 这样系统间的耦合度就低了 。
2、异步调用上面举的会员注册的例子同样适用于此处 , 同步阻塞式调用会使得调用链时间周期过长 , 而异步调用极大的缩短了调用链的时间 。3、队列缓冲消息中间件就像一个蓄水池 , 可将大量请求存储下来让后台逐一处理 , 所以像秒杀系统都少不了消息系统 。主流的消息中间件产品现在市面上有很多消息中间件 , 应用最为广泛的主要有:RabbitMQ、Kafka、RocketMQ、ActiveMQ等 。
高并发场景下 , 如何保证生产者投递到消息中间件的消息不丢失?
常见的中间件有哪些,消息中间件有哪些


消息中间件消息不丢失主要从以下几个方面考虑投递生产者向消息中间件投递消息是push的方式 , 这种方法会出现以下情况1、生产者挂掉了情况是这样的 , 你的生产者收到了数据 , 并存到了数据库中 , 同时生产者要降消息push到消息中间件做异步处理 。这时候如果生产者挂掉了 , 就导致消息数据没有push到消息中间件里 , 也就会出现数据不一致的问题 。
这时候我们可以在数据库设置是否投递成功标志位 , 在生产者push之后 , 再将标志位设置为已经投递 。另外 , 客气启动一个定时任务 , 检测是否有消息没有投递 , 保证消息数据一定会进入中间件 。2、消息重试生产者没有挂掉 , 但是因为网络等其他问题 , 导致生产者不知道有没有投递成功 。这时候生产者可以失败重试 , 这保证消息可以再次投递 。
但是这有可能会出现重复投递 , 导致出现中间件消息数据重复 。存储消息中间件是存到磁盘上的 , 存入磁盘的消息一般是不会丢失的 , 同时磁盘文件还会做备份 。如果一个丢失了 , 可以通过备份文件恢复 。消费一般消费者需要在消费者消费成功之后再设置提交消费位点 。如果消费失败 , 消费者不提交消费位点还是可以消费该数据的 。这就引出一个问题就是消息重复消费 。

推荐阅读