RocketMQ(6)——客户端配置详解.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
RocketMQ (6)——客户端配置详解 RocketMQ的客户端和服务端采取完全不⼀样的配置机制——客户端没有配置⽂件,所有的配置选项需要开发者使⽤对应的配置的setter进 ⾏设置。 由于现在⽹上基本找不到⼀套较为完善的配置⽂档,今天来讲讲截⽌⾄RocketMQ 4.0,客户端已有的所有配置的含义。 本⽂尽可能不深⼊讨论配置相关的原理和源码(除⾮笔者认为有必要交代对应的背景),尽可能以最简单的描述说清楚作为⼀个开发者从使 ⽤的⾓度需要明⽩的那些表现。具体相关原理或具体分析请参考附带的参考链接。 注:以下带 * 的,表⽰为重要、基础的配置参数。 ClientConfig RocketMQ的Producer (DefaultMQProducer)和Consumer(DefaultMQPushConsumer,DefaultMQPullConsumer),甚⾄运维相关的的 admin类(DefaultMQAdminExt)都继承⾃ClientConfig 。这意味着,其中的配置⽆论Producer还是Consumer都可以进⾏设置,其中⼤部分 都是公⽤的配置(但由于设计的问题,有些配置只会对消费或⽣产⽣效)。 namesrvAddr* 配置说明:NameServer的地址列表,若是集群,⽤;作为地址的分隔符。 默认值:-D系统参数rocketmq.namesrv.addr或环境变量NAMESRV_ADDR ⽆论⽣产者还是消费者,只要是客户端需要和服务器broker进⾏操作,就需要依赖Name Server进⾏服务发现。具体请看: instanceName* 配置说明:客户端实例名称 默认值:从-D系统参数rocketmq.client.name获取,否则就是DEFAULT 这个值虽然默认写是DEFAULT ,但在启动的时候,如果我们没有显⽰修改还是维持其DEFAULT 的话,RocketMQ会更新为当前的进程号: public void changeInstanceNameToPID (){ if(this instanceName equals(DEFAULT)) { this instanceName = String valueOf(UtilAll getPid()); } } RocketMQ⽤⼀个叫ClientID 的概念,来唯⼀标记⼀个客户端实例,⼀个客户端实例对于Broker⽽⾔会开辟⼀个Netty的客户端实例。⽽ ClientID是由ClientIP+InstanceName构成,故如果⼀个进程中多个实例(⽆论Producer还是Consumer)ClientIP和InstanceName都⼀ 样,他们将公⽤⼀个内部实例(同⼀套⽹络连接,线程资源等) 此外,此ClientID在对于Consumer负载均衡的时候起到唯⼀标识的作⽤,⼀旦多个实例(⽆论不同进程、不通机器、还是同⼀进程)的多个 Consumer实例有⼀样的ClientID ,负载均衡的时候必然RocketMQ任然会把两个实例当作⼀个client (因为同样⼀个clientID)。故为了避免 不必要的问题,ClientIP+instance Name 的组合建议唯⼀,除⾮有意需要共⽤连接、资源。 clientIP 配置说明:客户端IP 默认值:RemotingUtil.getLocalAddress() 这个值有两个⽤处: 1. 对于默认的instanceName( 见前⾯部分),如果没有显⽰设置,会使⽤ip+进程号,其中的ip便是这⾥的配置值 2. 对于Producer发送消息的时候,消息本⾝会存储本值到bornHost ,⽤于标记消息从哪台机器产⽣的 clientCallbackExecutorThreads 配置说明:客户端通信层接收到⽹络请求的时候,处理器的核数 默认值: Runtime.getRuntime().availableProcessors() 虽然⼤部分指令的发起⽅是客户端⽽处理⽅是broker/NameServer端,但客户端有时候也需要处理远端对发送给⾃⼰的命令,最常见的是⼀ 些运维指令如GET_CONSUMER_RUNNING_INFO ,或者消费实例上线/下线的推送指令NOTIFY_CONSUMER_IDS_CHANGED ,这些指 令的处理都在⼀个线程池处理,clientCallbackExecutorThreads 控制这个线程池的核数 pollNameServerInter

文档评论(0)

文库垃圾佬 + 关注
实名认证
文档贡献者

这个人很懒

1亿VIP精品文档

相关文档