RocketMQ是一个分布式、队列模型的开源消息中间件,前身是MetaQ,是阿里研发的一个队列模型的消息中间件,后开源给apache基金会成为了apache的顶级开源项目,具备高性能、高可靠、高实时、分布式特色,java
同时,普遍应用于多个领域,包括异步通讯解耦、企业解决方案、金融支付、电信、电子商务、快递物流、广告营销、社交、即时通讯、移动应用、手游、视频、物联网、车联网等。数据库
具备如下特色:apache
NameServer (名称服务器):服务器
Broker(消息服务器): 消息存储中心,接收来自 Producer 的消息并存储, Consumer 从这里取得消息架构
Producer (生产者):并发
Consumer(消费者):异步
Broker Server负责消息的存储和传递,消息查询,HA高可用等,Broker Server几个主要模块组成:async
Remoting Module(远程模块):broker入口,处理来自客户端的请求分布式
Client Manager(客户端管理):管理client(生产者/消费者)并维护消费者的主题订阅性能
Store Service(存储服务):提供简单的API中数据库中存储或查询消息
HA Service(高可用服务):提供master broker和slave broker之间的数据同步功能
Index Service(索引服务):将message创建索引来提供快速的查询能力
Broker 启动,跟全部的 Namesrv 保持长链接,定时发送心跳包
Producer 发送消息
Consumer 消费消息
Topic(主题): 表示消息的第一级类型,是最细粒度的订阅单位(生产者传递消息和消费者提取消息标识)
Tag(标签): 表示消息的第二级类型,能够是使用相同的Topic不一样的Tag来表示同一业务模块的不一样任务的消息,好比交易消息又能够分为:交易建立消息,交易完成消息等
Message(消息体): 消息是要传递的信息。 Message中必须包含一个Topic,可选Tag和key-vaule键值对
Message Queue(消息队列): 全部消息队列都是持久化
Group(组): 分为Producer Group(生产者组)和Consumer Group(消费者组),具备相同角色组成Group
Message Model(消息模式):
Message Order(消息顺序)
使用DefaultMQPushConsumer时,能够决定按顺序或同时使用消息
若是指定按顺序使用,则消息使用的最大并发度是使用者组订阅的消息队列数
在此模式下再也不保证消息顺序
Message Types(消息类型)
下载编译源码
# 下载$ > 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
启动 Name Server
# 启动 Name Server 服务 > nohup sh bin/mqnamesrv & # 启动完成后,查看日志$ > tail -f ~/logs/rocketmqlogs/namesrv.log The Name Server boot success...
启动 Broker
在 conf
目录下,RocketMQ 提供了多种 Broker 的配置文件:
broker.conf
:单主,异步刷盘。2m/
:双主,异步刷盘。2m-2s-async/
:两主两从,异步复制,异步刷盘。2m-2s-sync/
:两主两从,同步复制,异步刷盘。dledger/
:Dledger 集群,至少三节点# 启动 Broker服务 > nohup sh bin/mqbroker -n localhost:9876 & # 启动完成后,查看日志$ > tail -f ~/logs/rocketmqlogs/broker.log The broker[%s, 172.30.30.233:10911] boot success...
其中,参数:
-c
参数,配置读取的主 Broker 配置-n
参数,设置 RocketMQ Namesrv 地址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技术博客】,原创技术文章第一时间推出