Rocketmq原理简介

架构图

模块职责划分

  • rocketmq-common:通用的枚举、基类方法、或者数据结构,包名有admin、consumer、filter、hook、message
  • rocketmq-remoting:使用netty的客户端、服务端,使用fastjson序列化,自定义二进制协议
  • rocketmq-srvutil:只有一个ServerUtil类,只提供Server程序依赖,尽可能减少客户端依赖
  • rocketmq-store:消息存储,索引,consumerLog,commitLog等
  • rocketmq-client:消息发送和接收,包含consumer和producer
  • rocketmq-filtersrv:消息过滤器
  • rocketmq-broker:服务端,接受消息,存储消息,consumer拉取消息
  • rocketmq-tools:命令行工具
  • rocketmq-namesrv:NameServer,类似服务注册中心,broker在这里注册,consumer和producer在这里找到broker地址

运行源代码

it地址: https://github.com/apache/rocketmq.git

运行配置

启动NameServer启动配置,配置下RocketHome

环境变量:ROCKETMQ_HOME=C:\codes\rocketmq-release-4.0.0-incubating

启动Broke配置

broker的启动类为org.apache.rocketmq.broker.BrokerStartup,添加程序运行参数-n 127.0.0.1:9876 autoCreateTopicEnable=true即可运行broker服务,broker服务根据配置的9876端口会将自身信息注册到namesrv中。


RocketMq架构,特性,实例代码

https://github.com/apache/rocketmq/tree/master/docs/cn

RocketMq实现原理疑问

一个mq的重要概念一般有那些?

  producer,consumer,broker,partition,register center,rpc链接,序列化,数据持久化,rebalace

nameserver的作用是啥?

记录了Broke,topic,Queue的关系。

Topic和Queue,Broke 是什么样的关系,然后消息是如何发送和消费的?

1:一般来说订阅发布机制 只需要一个Queue就可以实现了,秉承着FIFO的原则,但是假如一个只有Queue,消费端的并发量就上不去,所以设计上就需要把消息分散到多个Queue上面去,然后consumer

消费对应的Queue,这样消费并发就上去了,然后把这一组Queue 就当做一个topic.

2:Broker就是存放Queue的服务,可以是多个topic的 Queue. 它们之间的关系是 一个topic对应多个Queue,然后Queue平均散落在broke上, 一个Broke至少有一个Queue.

在producer端发送消息的时候是需要指定 Topic, 然后按照某种策略发送到Queue, 一般一个Topic有默认4个Queue,然后就散落在broke上(假如有多个broke)。

3:消费的时候,consumer直接订阅的是queue,假如有4个queue,2个consumer它们会平分。然后去Queue所在的broke去消费。

是如何做持久化的?

Commitlog

rebalace是如何实现的?

通过nameserver,尽量做到平均。

猜你喜欢

转载自blog.csdn.net/louie_zhao/article/details/115445785