[[323531]]
RocketMQ是再次一个纯java、分布式、必须队列模型的先理开源消息中间件,前身是解的解读MetaQ,是阿里研发的一个队列模型的消息中间件,后开源给apache基金会成为了apache的顶级开源项目,具有高性能、高可靠、高实时、分布式特点,
同时,广泛应用于多个领域,包括异步通信解耦、企业解决方案、金融支付、电信、电子商务、快递物流、广告营销、社交、即时通信、移动应用、手游、视频、物联网、车联网等。
具有以下特点:
RocketMQ 架构原理分析
RocketMQ 架构
NameServer (名称服务器):
Broker(消息服务器): 消息存储中心,接收来自 Producer 的消息并存储, Consumer 从这里取得消息
Producer (生产者):
Consumer(消费者):
Broker Server
Broker Server负责消息的存储和传递,消息查询,HA高可用等,Broker Server几个主要模块组成:
Remoting Module(远程模块):broker入口,处理来自客户端的请求
Client Manager(客户端管理):管理client(生产者/消费者)并维护消费者的主题订阅
Store Service(存储服务):提供简单的API供给数据库存储或查询消息
HA Service(高可用服务):提供master broker和slave broker之间的数据同步功能
Index Service(索引服务):将message建立索引来提供快速的查询能力
RocketMQ 整体流程
1.启动 NameServer,NameServer启动后进行端口监听,等待 Broker、Producer、Consumer 连上来,相当于一个路由控制中心
2.Broker 启动,跟所有的 Namesrv 保持长连接,定时发送心跳包
3.收发消息前,先创建 Topic 。创建 Topic 时,需要指定该 Topic 要存储在哪些 Broker上。也可以在发送消息时自动创建Topic
4.Producer 发送消息
5.Consumer 消费消息
RocketMQ Message
Topic(主题): 表示消息的第一级类型,是最细粒度的订阅单位(生产者传递消息和消费者提取消息标识)
Tag(标签): 表示消息的第二级类型,可以是使用相同的Topic不同的Tag来表示同一业务模块的不同任务的消息,比如交易消息又可以分为:交易创建消息,交易完成消息等
Message(消息体): 消息是要传递的信息。Message中必须包含一个Topic,可选Tag和key-vaule键值对
Message Queue(消息队列): 所有消息队列都是持久化
Group(组): 分为Producer Group(生产者组)和Consumer Group(消费者组),具有相同角色组成Group
RocketMQ 特性
Message Model(消息模式):
Message Order(消息顺序)
如果指定按顺序使用,则消息使用的最大并发度是使用者组订阅的消息队列数
在此模式下不再保证消息顺序
Message Types(消息类型)
RocketMQ单机版安装
1.下载编译源码
- # 下载$
- > wget wget http://mirror.bit.edu.cn/apache/rocketmq/4.6.0/rocketmq-all-4.6.0-source- >
- # 解压$
- >unzip rocketmq-all-4.7.0-source-release.zip
- > cd rocketmq-all-4.7.0/
- # 编译$
- > mvn -Prelease-all -DskipTests clean install -U
- > cd distribution/target/rocketmq-4.7.0/rocketmq-4.7.0
2.启动 Name Server
- # 启动 Name Server 服务
- > nohup sh bin/mqnamesrv &
- # 启动完成后,查看日志$
- > tail -f ~/logs/rocketmqlogs/namesrv.log
- The Name Server boot success...
3.启动 Broker
在 conf 目录下,RocketMQ 提供了多种 Broker 的配置文件:
- # 启动 Broker服务
- > nohup sh bin/mqbroker -n localhost:9876 &
- # 启动完成后,查看日志$
- > tail -f ~/logs/rocketmqlogs/broker.log
- The broker[%s, 172.30.30.233:10911] boot success...
其中,参数:
4.Send & Receive Messages(消息发送与接收)
在发送/接收消息之前,我们需要告知client(生产者/消费者)Name Servers的地址。RocketMQ提供了多种方法来实现:
为简单起见,我们使用环境变量:NAMESRV_ADDR,如下所示:
- # 设置 Name Servers的地址$
- > export NAMESRV_ADDR=localhost:9876
- # 生产消息$
- > sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
- SendResult [sendStatus=SEND_OK, msgId= ...
- # 消费消息$
- > sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
- ConsumeMessageThread_%d Receive New Messages: [MessageExt...
责任编辑:武晓燕 来源: Ccww技术博客 RocketMQ分布式MetaQ
(责任编辑:知识)
中欧班列(西安)2021年累计运输车数突破3万车 同比增长24.36%
麻省理工学院开发“PhotoGuard”技术, 保护图像免受恶意 AI 编辑