RocketMQ学习1 概念简介+安装运行
这里写自定义目录标题
简介
定义
RocketMQ是一款分布式消息中间件,主要用于解决分布式系统中通信和数据处理问题,在不同场景下有着不同的作用。最开始是阿里巴巴内部开发出来使用的工具,后续提交到Apache上孵化。
在官网中,对最新版的5.0
版本的定义是: RocketMQ 5.0:云原生“消息、事件、流”实时数据处理平台,覆盖云边端一体化数据处理场景。
官网首页中,列举的几大核心特性,分别是:云原生,高吞吐,流处理,金融级,架构简单,生态友好。
而在我们平常的项目中,它通常可以用来起到如下的作用:
- 业务解耦: 通过发布/订阅(Publish/Subscribe)模型,生产者无需关心消费者的实现细节,只需要将消息发送到指定的主题(Topic),消费者根据自己的需求订阅这些主题并处理消息。这样可以降低不同服务之间的直接依赖,使得各个模块独立扩展和维护。
- 异步处理:允许任务异步执行,提高响应速度。例如,在订单系统中,下单操作完成后可以通过RocketMQ发送一个异步消息给库存系统去更新库存,用户无需等待库存系统的响应就能得到下单成功的反馈。
- 削峰填谷:当服务端短时间内收到大量请求时,RocketMQ可以作为缓冲区暂存请求,避免服务因瞬时流量高峰而崩溃,同时让后端服务可以根据自身的处理能力以更稳定的速率消费消息。
- 流量控制与负载均衡:通过队列机制实现消息的有序、批量或者延迟投递,并且支持在多个消费者之间进行负载均衡,确保整个系统的稳定性和可用性。
- 事务消息:RocketMQ支持分布式事务消息,能够保证在分布式环境下,如果业务操作和消息发送一并成功或都失败,则保持最终一致性。
- 监控与报警:内置丰富的运维监控工具,支持对消息堆积、消息延迟等指标的实时监控,并在出现问题时触发报警,以便及时人工介入处理。
总结来说,RocketMQ作为一种高效的消息中间件,是构建高并发、高性能、高可用分布式系统的重要基础设施之一。
与其它常见产品的对比
官方文档中,也给出了RocketMQ与市面上常用的相关产品的对比表格,我们可以观察到,RocketMQ各方面上,支持的都比较到位:
Messaging Product | Client SDK | Protocol and Specification | Ordered Message | Scheduled Message | Batched Message | BroadCast Message | Message Filter | Server Triggered Redelivery | Message Storage | Message Retroactive | Message Priority | High Availability and Failover | Message Track | Configuration | Management and Operation Tools |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ActiveMQ | Java, .NET, C++ etc. | Push model, support OpenWire, STOMP, AMQP, MQTT, JMS | Exclusive Consumer or Exclusive Queues can ensure ordering | Supported | Not Supported | Supported | Supported | Not Supported | Supports very fast persistence using JDBC along with a high performance journal,such as levelDB, kahaDB | Supported | Supported | Supported, depending on storage,if using levelDB it requires a ZooKeeper server | Not Supported | The default configuration is low level, user need to optimize the configuration parameters | Supported |
Kafka | Java, Scala etc. | Pull model, support TCP | Ensure ordering of messages within a partition | Not Supported | Supported, with async producer | Not Supported | Supported, you can use Kafka Streams to filter messages | Not Supported | High performance file storage | Supported offset indicate | Not Supported | Supported, requires a ZooKeeper server | Not Supported | Kafka uses key-value pairs format for configuration. These values can be supplied either from a file or programmatically. | Supported, use terminal command to expose core metrics |
RocketMQ | Java, C++, Go | Pull model, support TCP, JMS, OpenMessaging | Ensure strict ordering of messages,and can scale out gracefully | Supported | Supported, with sync mode to avoid message loss | Supported | Supported, property filter expressions based on SQL92 | Supported | High performance and low latency file storage | Supported timestamp and offset two indicates | Not Supported | Supported, Master-Slave model, without another kit | Supported | Work out of box,user only need to pay attention to a few configurations | Supported, rich web and terminal command to expose core metrics |
基本概念
接下来,我们一起来了解下RocketMQ的比较重要部分的基础概念。
主题(Topic)
Topic是Apache RocketMQ 中消息传输和存储的顶层容器,用于标识同一类业务逻辑的消息。主题通过TopicName来做唯一标识和区分。
生产者将消息发送到指定的Topic,而消费者则订阅特定的Topic以接收相关消息。是RocketMQ消息发布和订阅的基本单元。
消息标签(MessageTag)
消息标签是Apache RocketMQ 提供的细粒度消息分类属性,可以在主题层级之下做消息类型的细分。消费者通过订阅特定的标签来实现细粒度过滤。
消息类型(MessageType)
Apache RocketMQ 中按照消息传输特性的不同而定义的分类,用于类型管理和安全校验。 Apache RocketMQ 支持的消息类型有普通消息、顺序消息、事务消息和定时/延时消息。、
Apache RocketMQ 从5.0版本开始,支持强制校验消息类型,即每个主题Topic只允许发送一种消息类型的消息,这样可以更好的运维和管理生产系统,避免混乱。但同时保证向下兼容4.x版本行为,强制校验功能默认关闭,推荐通过服务端参数 enableTopicMessageTypeCheck 手动开启校验。
消息队列(MessageQueue)
队列是 Apache RocketMQ 中消息存储和传输的实际容器,也是消息的最小存储单元。 Apache RocketMQ 的所有主题都是由多个队列组成,以此实现队列数量的水平拆分和队列内部的流式存储。队列通过QueueId来做唯一标识和区分。
消息(Message)
消息是 Apache RocketMQ 中的最小数据传输单元。生产者将业务数据的负载和拓展属性包装成消息发送到服务端,服务端按照相关语义将消息投递到消费端进行消费。
生产者(Producer)
生产者是Apache RocketMQ 系统中用来构建并传输消息到服务端的运行实体。生产者通常被集成在业务系统中,将业务消息按照要求封装成消息并发送至服务端。
消费者分组(ConsumerGroup)
消费者分组是Apache RocketMQ 系统中承载多个消费行为一致的消费者的负载均衡分组。和消费者不同,消费者分组并不是运行实体,而是一个逻辑资源。在 Apache RocketMQ 中,通过消费者分组内初始化多个消费者实现消费性能的水平扩展以及高可用容灾。
消费者(Consumer)
消费者是Apache RocketMQ 中用来接收并处理消息的运行实体。消费者通常被集成在业务系统中,从服务端获取消息,并将消息转化成业务可理解的信息,供业务逻辑处理。
消息代理(Broker)
Broker是RocketMQ的核心组件,负责存储消息、接收生产者消息、推送消息给消费者等。RocketMQ集群由多个Broker组成,形成分布式的消息存储和传递系统。
名称服务器(NameServer)
Name Server是RocketMQ的寻址服务器,负责记录和管理Broker的元数据信息。Producer和Consumer通过Name Server找到相应的Broker。
安装运行
Windows平台
首先,在下载页面选择一个合适的版本进行下载。因为笔者是开发练习学习使用,所以直接选择了最新版本-5.1.4。
切记需要有Java开发环境。
下载好后,解压缩到指定文件路径。
然后配置环境变量,增加变量 ROCKETMQ_HOME,变量值填写解压后存放的目录,如:D:\rocketmq-all-5.1.4-bin-release
一切就绪后,进入安装路径下的bin目录下,打开命令行,执行命令
mqnamesrv.cmd
等待几秒后,就启动成功了。注意。默认的端口是9876。切记使用过程中,不能关掉当前命令行
然后再另外打开一个终端窗口,执行命令:
.\mqbroker -n localhost:9876
当提示如图信息时,就表示启动成功了。
验证
还是进入到bin目录下,打开命令行,执行如下命令:
# 设置环境变量-基于当前窗口,会话级别
SET NAMESRV_ADDR=localhost:9876
# 模拟发送消息
tools.cmd org.apache.rocketmq.example.quickstart.Producer
# 模拟消费消息
tools.cmd org.apache.rocketmq.example.quickstart.Consumer
小结
本篇文章介绍了下Apache Rocket MQ的基本信息和安装方式,以及简单的验证流程,下篇文章,会结合Java语言,实现简单的RocketMQ的功能的使用。