【消息中间件】常见消息中间件的介绍和对比
在分布式系统中 , 我们会广泛使用各种消息中间件来进行系统间的数据交换 , 以便于各系统之间实现异步解耦 。目前市场上开源的消息中间件有很多:如Kafka、RabbitMQ、RocketMQ等等 。
文章图片
文章图片
【【消息中间件】常见消息中间件的介绍和对比】什么是消息队列
在正式介绍和对比Kafka、RabbitMQ、RocketMQ之前 , 我们来说说什么是消息队列(Message queue , 简称MQ) , 从字面理解就是一个保存消息的一个容器 。那么我们为何需要这样一个容器呢?其实就是为了解耦各个系统 , 我们来举个例子:
文章图片
文章图片
有这么一个简单的场景 , 系统A负责生成userID , 并调用系统B、C 。如果系统BC频繁变化是否需要userID参数 , 则系统A的代码就得不断变化 , 如果哪天又来了系统DEF……也需要这个参数 , 则系统A又要加入很多业务逻辑 , 这样子各他系统之间就容易产生相互影响 , 另外大量的系统与A发生交互也容易产生问题 。
文章图片
文章图片
加了消息队列后 , A只负责产生userID , 至于谁要用这个参数 , 怎么用?系统A不管 。对这个数据感兴趣的系统自己去取用即可 , 各个系统之间就实现了解耦 。而且解耦后 , 整个服务也变成了一个异步的方式 , 系统A产生数据后 , 不用依次调用BCD来累计耗时 , 各系统可以同时来取用消息队列的数据进行处理 , 加大吞吐 。
消息队列的特点
文章图片
文章图片
1、先进先出:消息队列的顺序在入队的时候就基本已经确定了 , 一般是不需人工干预的 。
2、发布订阅:发布订阅是一种很高效的处理方式 , 如果不发生阻塞 , 基本可以当做是同步操作 。
3、持久化:持久化确保消息队列的使用不只是一个部分场景的辅助工具 , 而是让消息队列能像数据库一样存储核心的数据 。
4、分布式:在现在大流量、大数据的使用场景下 , 支持分布式的部署 , 才能被广泛使用 。消息队列的定位就是一个高性能的中间件 。
Kafka、RabbitMQ、RocketMQ介绍
Kafka
文章图片
文章图片
Kafka是LinkedIn开源的分布式发布-订阅消息系统 , 目前归属于Apache顶级项目 。Kafka主要为高吞吐量的订阅发布系统而设计 , 追求速度与持久化 。kafka中的消息由键、值、时间戳组成 , kafka不记录每个消息被谁使用 , 只通过偏移量记录哪些消息是未读的 , kafka中可以指定消费组来实现订阅发布的功能 。
RabbitMQ
文章图片
文章图片
RabbitMQ是使用Erlang语言开发的开源消息队列系统 , 基于AMQP协议来实现 。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全 。AMQP协议更多用在企业系统内 , 对数据一致性、稳定性和可靠性要求很高的场景 , 对性能和吞吐量的要求还在其次 。
推荐阅读
- [火科技]iPhone12系列又有消息,但我真的不想等了!
- 『苹果』原创 iPhone12再次传来好消息,首发A14仿生处理器,价格更感人!
- 「全媒体聚焦」要和高通说再见了,谷歌宣布一大消息,华为又将迎来对手
- 『』开发人员抱怨苹果拒绝其消息应用上架,限制了创新
- #消息#5G消息年内商用 RCS生态主导流量重构
- 香港新天域互联@开发人员抱怨苹果拒绝其消息应用上架,限制了创新
- 『』5G 消息来了,APP 瑟瑟发抖?
- 「极光JIGUANG」5G 消息来了,APP 瑟瑟发抖?
- 【蓝鲸TMT网】消息称滴滴旗下共享单车品牌青桔获 10 亿美元融资,官方回应不予置评
- 消息■5G消息的市场行业应用