当前位置: 首页 > wzjs >正文

绍兴网站制作公司专门做音箱的网站

绍兴网站制作公司,专门做音箱的网站,电子商务网站会员体系,河南大学学科建设处网站总览 学习 Dubbo 的服务发现机制,可以从以下几方面入手: 注册中心的配置服务的注册客户端拉取服务列表服务列表的本地缓存服务提供者列表变更的监听机制服务发现的接口设计 注册中心的配置 Dubbo 通过解析用户配置决定使用的注册中心。比如用户配置了…

总览

学习 Dubbo 的服务发现机制,可以从以下几方面入手:

  1. 注册中心的配置
  2. 服务的注册
  3. 客户端拉取服务列表
  4. 服务列表的本地缓存
  5. 服务提供者列表变更的监听机制
  6. 服务发现的接口设计

注册中心的配置

Dubbo 通过解析用户配置决定使用的注册中心。比如用户配置了 zookeeper://127.0.0.1:2181,Dubbo 在导出服务时解析出 name = zookeeper,便拿着这个名字到 ExtensionLoader 加载得到 ZookeeperServiceDiscoveryFactory,该工厂类生产出 ZookeeperServiceDiscovery,后续 ServiceDiscoveryRegistry 便可以通过调用 ZookeeperServiceDiscovery 的 doRegister 方法注册服务。

服务的注册

Spring 执行 refresh 方法后会触发 Dubbo 将服务注册到注册中心。

Spring 的 AbstractApplicationContext 执行 refresh 方法返回前,会发布 ContextRefreshedEvent, DubboBootstrapApplicationListener 接收到 ContextRefreshedEvent 后,会初始化并导出服务,最后将服务注册到注册中心。

/*** An ApplicationListener to control Dubbo application.*/
public class DubboDeployApplicationListenerimplements ApplicationListener<ApplicationContextEvent>, ApplicationContextAware, Ordered {@Overridepublic void onApplicationEvent(ApplicationContextEvent event) {if (nullSafeEquals(applicationContext, event.getSource())) {if (event instanceof ContextRefreshedEvent) {onContextRefreshedEvent((ContextRefreshedEvent) event);}...}}private void onContextRefreshedEvent(ContextRefreshedEvent event) {ModuleDeployer deployer = moduleModel.getDeployer();Assert.notNull(deployer, "Module deployer is null");Object singletonMutex = LockUtils.getSingletonMutex(applicationContext);// start moduleFuture future = null;synchronized (singletonMutex) {future = deployer.start();}...}
}

ModuleDeployer 在 start 方法中调用了 registerServices 方法,完成了服务的注册。其调用链如下:

ModuleDeployer.registerServices -> ModuleDeployer.registerServiceInternal
-> ServiceConfigBase.register -> Exporter.register

其中,ModuleDeployer.registerServiceInternal 遍历 configManager 中的每一个服务,逐个对它们进行注册。

Exporter.register 实际调用的类视注册中心的不同而不同,以 ZooKeeper 为例,通过模版方法实现服务注册:

public abstract class FailbackRegistry extends AbstractRegistry {@Overridepublic void register(URL url) {if (!shouldRegister(url)) {return;}super.register(url);removeFailedRegistered(url);removeFailedUnregistered(url);try {// Sending a registration request to the server sidedoRegister(url);} catch (Exception e) {Throwable t = e;// If the startup detection is opened, the Exception is thrown directly.boolean check = getUrl().getParameter(Constants.CHECK_KEY, true)&& url.getParameter(Constants.CHECK_KEY, true)&& (url.getPort() != 0);boolean skipFailback = t instanceof SkipFailbackWrapperException;if (check || skipFailback) {if (skipFailback) {t = t.getCause();}throw new IllegalStateException("Failed to register " + url + " to registry " + getUrl().getAddress() + ", cause: "+ t.getMessage(),t);} else {logger.error(INTERNAL_ERROR,"unknown error in registry module","","Failed to register " + url + ", waiting for retry, cause: " + t.getMessage(),t);}// Record a failed registration request to a failed list, retry regularlyaddFailedRegistered(url);}}
}

doRegister 仅仅是在 Zookeeper 创建一个 ZNode(Zookeeper 文件系统中的节点):

    @Overridepublic void doRegister(URL url) {try {checkDestroyed();zkClient.create(toUrlPath(url), url.getParameter(DYNAMIC_KEY, true), true);} catch (Throwable e) {throw new RpcException("Failed to register " + url + " to zookeeper " + getUrl() + ", cause: " + e.getMessage(), e);}}

文章转载自:

http://j3UArYMy.wxccm.cn
http://dqNPCkjZ.wxccm.cn
http://pftoDc9h.wxccm.cn
http://gIB8pUJ9.wxccm.cn
http://X5kAthUB.wxccm.cn
http://G2jlrJwV.wxccm.cn
http://RzzwQo88.wxccm.cn
http://NFz4hcnN.wxccm.cn
http://5gYlh5Qb.wxccm.cn
http://LY4tN0Qy.wxccm.cn
http://ymDcD6YS.wxccm.cn
http://3uxyRcaF.wxccm.cn
http://yL1Pu20O.wxccm.cn
http://RRIQL8UW.wxccm.cn
http://8EHdFElA.wxccm.cn
http://aKoBFJt0.wxccm.cn
http://nS0wMpJM.wxccm.cn
http://tQDWy8gy.wxccm.cn
http://0RBPvcuu.wxccm.cn
http://rdCZTVro.wxccm.cn
http://x1w2piyR.wxccm.cn
http://kc2hw5Me.wxccm.cn
http://RfJ5UyfI.wxccm.cn
http://9MVkrmD2.wxccm.cn
http://k3EHYH4v.wxccm.cn
http://VPuzdHto.wxccm.cn
http://fMaHQ3z1.wxccm.cn
http://xD70UaNd.wxccm.cn
http://qUfzuW8b.wxccm.cn
http://awPdPMOF.wxccm.cn
http://www.dtcms.com/wzjs/668434.html

相关文章:

  • 设计感十足的网站东营建设信息网(东营市住房和城乡
  • 电子商务网站开发系统网站建设越来越注重用户体验
  • 东莞 外贸网站建设wordpress 回到首页
  • 网站建设价格很 好乐云seo网站排名查询工具
  • 西安做网站app网站优点介绍
  • 建房子找哪个网站设计怎么知道公司网站是哪个公司做的
  • 做网站现在什么最赚钱吗php手机网站
  • 徐州做网站的公司哪家好中文网站排名
  • 做展示类网站基于mvc的网站开发
  • asp古典网站源码室内设计效果图大全
  • 用dw做的代码怎么放在网站上网站开发手机版
  • 跨境电商网站如何做推广子洲网站建设制作
  • 网站 兼容性微信小程序商城怎么开发
  • 从网站栏目看网站功能商城网站制作公司
  • 宿州市网站建设有哪些公司装修3d效果图怎么制作
  • 广州微网站建设信息wordpress底部热门标签
  • 建设网站的虚拟机配置做网页找什么公司
  • 网站营销概念数据分析师简历
  • 做网站的软件去哪里买桂平网站制作
  • 制作php网站用什么软件竞价恶意点击立案标准
  • 网站免费建设购物网站设计开题报告
  • 剪辑素材网站免费网站可以一个人做吗
  • 做超市商品海报免费海报模版网站seo优化运营
  • 成都建站优化公司电脑店网站模板
  • 在线查询网站收录南昌网络营销网站
  • 重庆网站建设案例开展网络营销的企业网站有哪些
  • 网站制作 南通培训网登录入口
  • 域名注册好后怎么建设网站石家庄企业网站开发
  • 浏览器看外国网站百度关键词排名点
  • 网站广告psd哪个网站做的系统好用