RocketMQ消息中间件的使用

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

RocketMQ消息中间件的使用

为什么选择 RocketMQ?

根据我们的研究,随着使用中队列和虚拟主题的增加,ActiveMQ IO 模块达到了瓶颈。我们尽力通过节流、断路器或降级来解决这个问题,但效果不佳。所以我们开始关注当时流行的消息传递解决方案Kafka。不幸的是,Kafka 无法满足我们的要求,尤其是在低延迟和高可靠性方面,请参阅此处了解详细信息。

在这种情况下,我们决定发明一个新的消息传递引擎来处理更广泛的用例集,从传统的发布/订阅场景到大容量实时零丢失容忍交易系统。我们相信这个解决方案可能是有益的,因此我们希望将其开源给社区。如今,已有 100 多家公司在其业务中使用开源版本的 RocketMQ。

消息队列是一种“先进先出”的数据结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PU64BFpk-1667211673180)(D:/PRD/资料/文档/img/queue1.png)]

其应用场景主要包含以下3个方面

1. 应用解耦

系统的耦合性越高,容错性就越低。以电商应用为例,用户创建订单后,如果耦合调用库存系统、物流系统、支付系统,任何一个子系统出了故障或者因为升级等原因暂时不可用,都会造成下单操作异常,影响用户使用体验。

请添加图片描述

使用消息队列解耦合,系统的耦合性就会提高了。比如物流系统发生故障,需要几分钟才能来修复,在这段时间内,物流系统要处理的数据被缓存到消息队列中,用户的下单操作正常完成。当物流系统回复后,补充处理存在消息队列中的订单消息即可,终端系统感知不到物流系统发生过几分钟故障。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S7a9idq0-1667211673183)(D:/PRD/资料/文档/img/解耦2.png)]

2. 流量削峰

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x5OVh5X4-1667211673184)(D:/PRD/资料/文档/img/mq-5.png)]

应用系统如果遇到系统请求流量的瞬间猛增,有可能会将系统压垮。有了消息队列可以将大量请求缓存起来,分散到很长一段时间处理,这样可以大大提到系统的稳定性和用户体验。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iweWk9sm-1667211673185)(D:/PRD/资料/文档/img/mq-6.png)]

一般情况,为了保证系统的稳定性,如果系统负载超过阈值,就会阻止用户请求,这会影响用户体验,而如果使用消息队列将请求缓存起来,等待系统处理完毕后通知用户下单完毕,这样总不能下单体验要好。

处于经济考量目的:

业务系统正常时段的QPS如果是1000,流量最高峰是10000,为了应对流量高峰配置高性能的服务器显然不划算,这时可以使用消息队列对峰值流量削峰

3. 数据分发

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-09q0TBBT-1667211673186)(D:/PRD/资料/文档/img/mq-1.png)]

通过消息队列可以让数据在多个系统更加之间进行流通。数据的产生方不需要关心谁来使用数据,只需要将数据发送到消息队列,数据使用方直接在消息队列中直接获取数据即可

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nN4Nn9br-1667211673187)(D:/PRD/资料/文档/img/mq-2.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)]

我们这里下载4.9.3版本

素材:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值