RocketMQ消息中间件的使用
文章目录
为什么选择 RocketMQ?
根据我们的研究,随着使用中队列和虚拟主题的增加,ActiveMQ IO 模块达到了瓶颈。我们尽力通过节流、断路器或降级来解决这个问题,但效果不佳。所以我们开始关注当时流行的消息传递解决方案Kafka。不幸的是,Kafka 无法满足我们的要求,尤其是在低延迟和高可靠性方面,请参阅此处了解详细信息。
在这种情况下,我们决定发明一个新的消息传递引擎来处理更广泛的用例集,从传统的发布/订阅场景到大容量实时零丢失容忍交易系统。我们相信这个解决方案可能是有益的,因此我们希望将其开源给社区。如今,已有 100 多家公司在其业务中使用开源版本的 RocketMQ。
消息队列是一种“先进先出”的数据结构
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PU64BFpk-1667211673180)(D:/PRD/资料/文档/img/queue1.png)]](https://i-blog.csdnimg.cn/blog_migrate/defa560a9c2a54f22cb76dd3b9a70a68.png)
其应用场景主要包含以下3个方面
1. 应用解耦
系统的耦合性越高,容错性就越低。以电商应用为例,用户创建订单后,如果耦合调用库存系统、物流系统、支付系统,任何一个子系统出了故障或者因为升级等原因暂时不可用,都会造成下单操作异常,影响用户使用体验。

使用消息队列解耦合,系统的耦合性就会提高了。比如物流系统发生故障,需要几分钟才能来修复,在这段时间内,物流系统要处理的数据被缓存到消息队列中,用户的下单操作正常完成。当物流系统回复后,补充处理存在消息队列中的订单消息即可,终端系统感知不到物流系统发生过几分钟故障。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S7a9idq0-1667211673183)(D:/PRD/资料/文档/img/解耦2.png)]](https://i-blog.csdnimg.cn/blog_migrate/e2c16168c9e3b88173cc5fd6cd9e35e9.png)
2. 流量削峰
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x5OVh5X4-1667211673184)(D:/PRD/资料/文档/img/mq-5.png)]](https://i-blog.csdnimg.cn/blog_migrate/fee2b01a554d7d4c060491eb89247b65.png)
应用系统如果遇到系统请求流量的瞬间猛增,有可能会将系统压垮。有了消息队列可以将大量请求缓存起来,分散到很长一段时间处理,这样可以大大提到系统的稳定性和用户体验。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iweWk9sm-1667211673185)(D:/PRD/资料/文档/img/mq-6.png)]](https://i-blog.csdnimg.cn/blog_migrate/b3cc985b95da5ff6f64215b920447ee3.png)
一般情况,为了保证系统的稳定性,如果系统负载超过阈值,就会阻止用户请求,这会影响用户体验,而如果使用消息队列将请求缓存起来,等待系统处理完毕后通知用户下单完毕,这样总不能下单体验要好。
处于经济考量目的:
业务系统正常时段的QPS如果是1000,流量最高峰是10000,为了应对流量高峰配置高性能的服务器显然不划算,这时可以使用消息队列对峰值流量削峰
3. 数据分发
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-09q0TBBT-1667211673186)(D:/PRD/资料/文档/img/mq-1.png)]](https://i-blog.csdnimg.cn/blog_migrate/aa252f06c53cbdd51236f781761075ae.png)
通过消息队列可以让数据在多个系统更加之间进行流通。数据的产生方不需要关心谁来使用数据,只需要将数据发送到消息队列,数据使用方直接在消息队列中直接获取数据即可
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nN4Nn9br-1667211673187)(D:/PRD/资料/文档/img/mq-2.png)]](https://i-blog.csdnimg.cn/blog_migrate/4fc0f55c08e55715b599a562bc1a7897.png)
4. MQ的优点和缺点
优点:解耦、削峰、数据分发
缺点包含以下几点:
-
系统可用性降低
系统引入的外部依赖越多,系统稳定性越差。一旦MQ宕机,就会对业务造成影响。
如何保证MQ的高可用?
-
系统复杂度提高
MQ的加入大大增加了系统的复杂度,以前系统间是同步的远程调用,现在是通过MQ进行异步调用。
如何保证消息没有被重复消费?怎么处理消息丢失情况?那么保证消息传递的顺序性?
-
一致性问题
A系统处理完业务,通过MQ给B、C、D三个系统发消息数据,如果B系统、C系统处理成功,D系统处理失败。
如何保证消息数据处理的一致性?
5. RocketMQ vs. ActiveMQ vs. Kafka之间有什么不同
| 消息产品 | 客户端 SDK | 协议和规范 | 订购信息 | 预定消息 | 批量消息 | 广播消息 | 消息过滤器 | 服务器触发的重新交付 | 消息存储 | 消息追溯 | 消息优先级 | 高可用性和故障转移 | 消息跟踪 | 配置 | 管理和运营工具 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ActiveMQ | Java、.NET、C++ 等。 | 推送模型,支持 OpenWire、STOMP、AMQP、MQTT、JMS | Exclusive Consumer 或 Exclusive Queues 可以保证排序 | 支持的 | 不支持 | 支持的 | 支持的 | 不支持 | 使用 JDBC 和高性能日志支持非常快速的持久化,例如 levelDB、kahaDB | 支持的 | 支持的 | 支持,取决于存储,如果使用 levelDB 则需要 ZooKeeper 服务器 | 不支持 | 默认配置为低级,用户需优化配置参数 | 支持的 |
| kafka | Java、Scala 等。 | 拉取模型,支持TCP | 确保分区内消息的排序 | 不支持 | 支持,带有异步生产者 | 不支持 | 支持,可以使用Kafka Streams过滤消息 | 不支持 | 高性能文件存储 | 支持的偏移量指示 | 不支持 | 支持,需要 ZooKeeper 服务器 | 不支持 | Kafka 使用键值对格式进行配置。这些值可以从文件或以编程方式提供。 | 支持,使用终端命令公开核心指标 |
| RocketMQ | Java、C++、围棋 | 拉取模型,支持 TCP、JMS、OpenMessaging | 确保消息的严格排序,并且可以优雅地横向扩展 | 支持的 | 支持,具有同步模式以避免消息丢失 | 支持的 | 支持的基于 SQL92 的属性过滤器表达式 | 支持的 | 高性能和低延迟的文件存储 | 支持的时间戳和偏移量两种表示 | 不支持 | 支持的主从模型,无需其他套件 | 支持的 | 开箱即用,用户只需注意一些配置 | 支持的、丰富的 Web 和终端命令以公开核心指标 |
官网地址:https://rocketmq.apache.org/
1、下载RocketMQ安装包
**要求:**准备工作
软硬件需求
- Linux64位系统
- JDK1.8(64位)
- 源码安装需要安装Maven 3.2.x
- **注意:**集成RocketMQ需要开放的端口: 9876,10912,10911,10909,没有开放这些端口将访问不了项目
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5PU3mwwb-1667211673188)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20221025085826308.png)]](https://i-blog.csdnimg.cn/blog_migrate/f6c12e4d580ee6a85fc3ec77d75b079a.png)
我们这里下载4.9.3版本
素材:

本文介绍了RocketMQ消息中间件,阐述选择它的原因,如解决ActiveMQ和Kafka的不足,还说明了其应用场景包括应用解耦、流量削峰和数据分发等。详细讲解了在Linux系统下的安装、配置、启动服务、控制台安装与启动,以及使用方法,包括普通消息和延时消息测试,还提及自定义延时时间等级。
最低0.47元/天 解锁文章
576

被折叠的 条评论
为什么被折叠?



