他处找到的对参数讲的最全的

1,createBrokerController
System.setProperty(RemotingCommand.RemotingVersionKey, Integer.toString(MQVersion.CurrentVersion));

// Socket发送缓冲区大小
if (null == System.getProperty(NettySystemConfig.SystemPropertySocketSndbufSize)) {
NettySystemConfig.SocketSndbufSize = 131072;
}
默认发送缓冲区大小128M
// Socket接收缓冲区大小
if (null == System.getProperty(NettySystemConfig.SystemPropertySocketRcvbufSize)) {
NettySystemConfig.SocketRcvbufSize = 131072;
}
默认接收缓冲区大小128M

// 检测包冲突
PackageConflictDetect.detectFastjson();

// 解析命令行
Options options = ServerUtil.buildCommandlineOptions(new Options());
commandLine = ServerUtil.parseCmdLine("mqbroker", args, buildCommandlineOptions(options),
new PosixParser());
if (null == commandLine) {
System.exit(-1);
return null;
}
2,final BrokerConfig brokerConfig = new BrokerConfig();
private String rocketmqHome = System.getProperty(MixAll.ROCKETMQ_HOME_PROPERTY,
System.getenv(MixAll.ROCKETMQ_HOME_ENV));
获取rocketMq目录
@ImportantField
private String namesrvAddr = System.getProperty(MixAll.NAMESRV_ADDR_PROPERTY,
System.getenv(MixAll.NAMESRV_ADDR_ENV));
获取namesrc地址
@ImportantField
private String brokerIP1 = RemotingUtil.getLocalAddress();
获取本地地址
private String brokerIP2 = RemotingUtil.getLocalAddress();
获取本地地址
@ImportantField
private String brokerName = localHostName();
获取broker hostname
@ImportantField
private String brokerClusterName = "DefaultCluster";
默认集群名称
@ImportantField
private long brokerId = MixAll.MASTER_ID;
master集群ID 必须为0
private int brokerPermission = PermName.PERM_READ | PermName.PERM_WRITE;
broker权限 默认读与写
private int defaultTopicQueueNums = 8;
默认队列数量

// 自动创建Topic功能是否开启(线上建议关闭)
@ImportantField
private boolean autoCreateTopicEnable = true;
// 自动创建以集群名字命名的Topic功能是否开启
private boolean clusterTopicEnable = true;
// 自动创建以服务器名字命名的Topic功能是否开启
private boolean brokerTopicEnable = true;
// 自动创建订阅组功能是否开启(线上建议关闭)
@ImportantField
private boolean autoCreateSubscriptionGroup = true;

private int sendMessageThreadPoolNums = 16 + Runtime.getRuntime().availableProcessors() * 4;
发送消息线程池数量
private int pullMessageThreadPoolNums = 16 + Runtime.getRuntime().availableProcessors() * 2;
订阅消息线程池数量
private int adminBrokerThreadPoolNums = 16;
adminBroker 线程池数量 各自独立的线程池 做到线程池隔离
private int clientManageThreadPoolNums = 16;
clientManage线程池数量
private int flushConsumerOffsetInterval = 1000 * 5;
flush消费端 文件偏移时间戳 默认5秒
private int flushConsumerOffsetHistoryInterval = 1000 * 60;
flush消费端 历史文件偏移时间戳 默认1

// 是否拒绝接收事务消息
@ImportantField
private boolean rejectTransactionMessage = false;

// 是否从地址服务器寻找Name Server地址,正式发布后,默认值为false
@ImportantField
private boolean fetchNamesrvAddrByAddressServer = false;

// 发送消息对应的线程池阻塞队列size
private int sendThreadPoolQueueCapacity = 100000;

// 订阅消息对应的线程池阻塞队列size
private int pullThreadPoolQueueCapacity = 100000;

// 过滤服务器数量
private int filterServerNums = 0;

// Consumer订阅消息时,Broker是否开启长轮询
private boolean longPollingEnable = true;

// 如果是短轮询,服务器挂起时间
private long shortPollingTimeMills = 1000;

// notify consumerId changed 开关
private boolean notifyConsumerIdsChangedEnable = true;

// slave 是否需要纠正位点
private boolean offsetCheckInSlave = false;   

3,final NettyServerConfig nettyServerConfig = new NettyServerConfig();
netty 服务配置
private int listenPort = 8888; 监听端口
private int serverWorkerThreads = 8;Netty服务工作线程数量
private int serverCallbackExecutorThreads = 0;Netty服务异步回调线程池线程数量
private int serverSelectorThreads = 3;Netty Selector线程数量
private int serverOnewaySemaphoreValue = 256;控制单向的信号量 一次请求没有响应
private int serverAsyncSemaphoreValue = 64;控制异步信号量
private int serverChannelMaxIdleTimeSeconds = 120;服务空闲心跳检测时间间隔 单位秒
private int serverSocketSndBufSize = NettySystemConfig.SocketSndbufSize;
Netty发送缓冲区大小
private int serverSocketRcvBufSize = NettySystemConfig.SocketRcvbufSize;
Netty接受缓冲区大小
private boolean serverPooledByteBufAllocatorEnable = false;是否使用Netty内存池
4,final NettyClientConfig nettyClientConfig = new NettyClientConfig();
private int clientWorkerThreads = 4;Netty客户端工作线程
private int clientCallbackExecutorThreads = Runtime.getRuntime().availableProcessors();
Netty服务异步回调线程池线程数量
private int clientOnewaySemaphoreValue = NettySystemConfig.ClientOnewaySemaphoreValue;
控制单向的信号量 一次请求没有响应
private int clientAsyncSemaphoreValue = NettySystemConfig.ClientAsyncSemaphoreValue;
控制异步信号量
private long connectTimeoutMillis = 3000;
连接超时时间
private long channelNotActiveInterval = 1000 * 60;
扫描channel未激活时间戳
private int clientChannelMaxIdleTimeSeconds = 120;
客户端闲心跳检测时间间隔 单位秒
private int clientSocketSndBufSize = NettySystemConfig.SocketSndbufSize;
客户端发送缓冲区大小
private int clientSocketRcvBufSize = NettySystemConfig.SocketRcvbufSize;
客户端接受缓冲区大小
private boolean clientPooledByteBufAllocatorEnable = false;
客户端是否支持netty内存池
nettyServerConfig.setListenPort(10911);
监听端口
5,final MessageStoreConfig messageStoreConfig = new MessageStoreConfig();
// 存储跟目录
@ImportantField
private String storePathRootDir = System.getProperty("user.home") + File.separator + "store";

// CommitLog存储目录
@ImportantField
private String storePathCommitLog = System.getProperty("user.home") + File.separator + "store"
        + File.separator + "commitlog";

// CommitLog每个文件大小 1G
private int mapedFileSizeCommitLog = 1024 * 1024 * 1024;
// ConsumeQueue每个文件大小 默认存储30W条消息
private int mapedFileSizeConsumeQueue = 300000 * ConsumeQueue.CQStoreUnitSize;
// CommitLog刷盘间隔时间(单位毫秒)
@ImportantField
private int flushIntervalCommitLog = 1000;
// 是否定时方式刷盘,默认是实时刷盘
@ImportantField
private boolean flushCommitLogTimed = false;
// ConsumeQueue刷盘间隔时间(单位毫秒)
private int flushIntervalConsumeQueue = 1000;
// 清理资源间隔时间(单位毫秒)
private int cleanResourceInterval = 10000;
// 删除多个CommitLog文件的间隔时间(单位毫秒)
private int deleteCommitLogFilesInterval = 100;
// 删除多个ConsumeQueue文件的间隔时间(单位毫秒)
private int deleteConsumeQueueFilesInterval = 100;
// 强制删除文件间隔时间(单位毫秒)
private int destroyMapedFileIntervalForcibly = 1000 * 120;
// 定期检查Hanged文件间隔时间(单位毫秒)
private int redeleteHangedFileInterval = 1000 * 120;
// 何时触发删除文件, 默认凌晨4点删除文件
@ImportantField
private String deleteWhen = "04";
// 磁盘空间最大使用率
private int diskMaxUsedSpaceRatio = 75;
// 文件保留时间(单位小时)
@ImportantField
private int fileReservedTime = 72;
// 写消息索引到ConsumeQueue,缓冲区高水位,超过则开始流控
private int putMsgIndexHightWater = 600000;
// 最大消息大小,默认512K
private int maxMessageSize = 1024 * 512;
// 重启时,是否校验CRC
private boolean checkCRCOnRecover = true;
// 刷CommitLog,至少刷几个PAGE
private int flushCommitLogLeastPages = 4;
// 刷ConsumeQueue,至少刷几个PAGE
private int flushConsumeQueueLeastPages = 2;
// 刷CommitLog,彻底刷盘间隔时间
private int flushCommitLogThoroughInterval = 1000 * 10;
// 刷ConsumeQueue,彻底刷盘间隔时间
private int flushConsumeQueueThoroughInterval = 1000 * 60;
// 最大被拉取的消息字节数,消息在内存
@ImportantField
private int maxTransferBytesOnMessageInMemory = 1024 * 256;
// 最大被拉取的消息个数,消息在内存
@ImportantField
private int maxTransferCountOnMessageInMemory = 32;
// 最大被拉取的消息字节数,消息在磁盘
@ImportantField
private int maxTransferBytesOnMessageInDisk = 1024 * 64;
// 最大被拉取的消息个数,消息在磁盘
@ImportantField
private int maxTransferCountOnMessageInDisk = 8;
// 命中消息在内存的最大比例
@ImportantField
private int accessMessageInMemoryMaxRatio = 40;
// 是否开启消息索引功能
@ImportantField
private boolean messageIndexEnable = true;
private int maxHashSlotNum = 5000000;
private int maxIndexNum = 5000000 * 4;
private int maxMsgsNumBatch = 64;
// 是否使用安全的消息索引功能,即可靠模式。
// 可靠模式下,异常宕机恢复慢
// 非可靠模式下,异常宕机恢复快
@ImportantField
private boolean messageIndexSafe = false;
// HA功能
private int haListenPort = 10912;
private int haSendHeartbeatInterval = 1000 * 5;
private int haHousekeepingInterval = 1000 * 20;
private int haTransferBatchSize = 1024 * 32;
// 如果不设置,则从NameServer获取Master HA服务地址
@ImportantField
private String haMasterAddress = null;
// Slave落后Master超过此值,则认为存在异常
private int haSlaveFallbehindMax = 1024 * 1024 * 256;
@ImportantField
private BrokerRole brokerRole = BrokerRole.ASYNC_MASTER;
@ImportantField
private FlushDiskType flushDiskType = FlushDiskType.ASYNC_FLUSH;
// 同步刷盘超时时间
private int syncFlushTimeout = 1000 * 5;
// 定时消息相关
private String messageDelayLevel = "1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h";
private long flushDelayOffsetInterval = 1000 * 10;
// 磁盘空间超过90%警戒水位,自动开始删除文件
@ImportantField
private boolean cleanFileForciblyEnable = true;

6,// 如果是slave,修改默认值
if (BrokerRole.SLAVE == messageStoreConfig.getBrokerRole()) {
int ratio = messageStoreConfig.getAccessMessageInMemoryMaxRatio() - 10;
messageStoreConfig.setAccessMessageInMemoryMaxRatio(ratio);
}
如果是master broker命中消息在内存的最大比例是40
如果是slave broker命中消息在内存的最大比例是30
7,String namesrvAddr = brokerConfig.getNamesrvAddr();
if (null != namesrvAddr) {
try {
String[] addrArray = namesrvAddr.split(";");
if (addrArray != null) {
for (String addr : addrArray) {
RemotingUtil.string2SocketAddress(addr);
}
}
}
catch (Exception e) {
System.out
.printf(
"The Name Server Address[%s] illegal, please set it as follows, "127.0.0.1:9876;192.168.0.1:9876"\n",
namesrvAddr);
System.exit(-3);
}
}
检测Name Server地址设置是否正确 IP:PORT
7, switch (messageStoreConfig.getBrokerRole()) {
case ASYNC_MASTER:
case SYNC_MASTER:
brokerConfig.setBrokerId(MixAll.MASTER_ID);
break;
case SLAVE:
if (brokerConfig.getBrokerId() <= 0) {
System.out.println("Slave's brokerId must be > 0");
System.exit(-3);
}

            break;
        default:
            break;
        }
  判断如果是Master Broker Id必须是0 ,如果是Slave Broker Id必须大于0

8,// Master监听Slave请求的端口,默认为服务端口+1
messageStoreConfig.setHaListenPort(nettyServerConfig.getListenPort() + 1);

// 初始化Logback
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
JoranConfigurator configurator = new JoranConfigurator();
configurator.setContext(lc);
lc.reset();
configurator.doConfigure(brokerConfig.getRocketmqHome() + "/conf/logback_broker.xml");
        log = LoggerFactory.getLogger(LoggerName.BrokerLoggerName);

9,final BrokerController controller = new BrokerController(
brokerConfig,
nettyServerConfig,
nettyClientConfig,
messageStoreConfig);
初始化服务控制对象
this.brokerConfig = brokerConfig; broker配置
this.nettyServerConfig = nettyServerConfig;netty服务配置
this.nettyClientConfig = nettyClientConfig;netty客户端配置
this.messageStoreConfig = messageStoreConfig;消息存储配置
this.consumerOffsetManager = new ConsumerOffsetManager(this);
消费进度管理
this.topicConfigManager = new TopicConfigManager(this);
Topic配置管理
this.pullMessageProcessor = new PullMessageProcessor(this);
拉消息请求处理
this.pullRequestHoldService = new PullRequestHoldService(this);
拉消息请求管理,如果拉不到消息,则在这里Hold住,等待消息到来
this.consumerIdsChangeListener = new DefaultConsumerIdsChangeListener(this);
ConsumerId列表变化,通知所有Consumer
this.consumerManager = new ConsumerManager(this.consumerIdsChangeListener);
Consumer连接、订阅关系管理
this.producerManager = new ProducerManager();
管理Producer组及各个Producer连接
this.clientHousekeepingService = new ClientHousekeepingService(this);
定期检测客户端连接,清除不活动的连接
this.broker2Client = new Broker2Client(this);
Broker主动调用客户端接口
this.subscriptionGroupManager = new SubscriptionGroupManager(this);
用来管理订阅组,包括订阅权限等
this.brokerOuterAPI = new BrokerOuterAPI(nettyClientConfig);
Broker对外调用的API封装
this.filterServerManager = new FilterServerManager(this);
过滤服务管理
if (this.brokerConfig.getNamesrvAddr() != null) {
this.brokerOuterAPI.updateNameServerAddressList(this.brokerConfig.getNamesrvAddr());
log.info("user specfied name server address: {}",this.brokerConfig.getNamesrvAddr());
}
更新namesrv地址,防止存在存留数据
this.slaveSynchronize = new SlaveSynchronize(this);
Slave从Master同步信息(非消息)
this.sendThreadPoolQueue =
new LinkedBlockingQueue<Runnable>(this.brokerConfig.getSendThreadPoolQueueCapacity());
初始化发送消息对应的线程池阻塞队列size
this.pullThreadPoolQueue =
new LinkedBlockingQueue<Runnable>(this.brokerConfig.getPullThreadPoolQueueCapacity());
初始化订阅消息对应的线程池阻塞队列size
this.brokerStatsManager = new BrokerStatsManager(this.brokerConfig.getBrokerClusterName());
broker 状态管理
this.setStoreHost(new InetSocketAddress(this.getBrokerConfig().getBrokerIP1(), this
.getNettyServerConfig().getListenPort()));
暂时没发现在哪用,等用到了在说

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,277评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,689评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,624评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,356评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,402评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,292评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,135评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,992评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,429评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,636评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,785评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,492评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,092评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,723评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,858评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,891评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,713评论 2 354

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,654评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,625评论 18 399
  • 小编费力收集:给你想要的面试集合 1.C++或Java中的异常处理机制的简单原理和应用。 当JAVA程序违反了JA...
    八爷君阅读 4,587评论 1 114
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,243评论 11 349
  • 速度如我,昨天约的今晚见面,今天工作也特别忙,正好下班时间弄完,对方打电话过来,问我能否正点下班,还没有收拾的...
    sixrain阅读 165评论 0 0