当前位置: 首页 > 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://www.dtcms.com/wzjs/333992.html

相关文章:

  • 做网站用哪个eclipse网络营销推广工具
  • wordpress主页导航长沙网站seo方法
  • wordpress的短代码厦门百度整站优化服务
  • 一份完整的网站策划方案做公司网站需要多少钱
  • 汽车设计网站武汉做seo公司
  • 手机网站效果图做多大的关键词的作用
  • 美国网上做调查赚钱10大网站推荐百度竞价专员
  • 网站广告推广平台seo网站推广平台
  • 张家港网站定制足球积分排行榜最新
  • 黄骗免费网站东莞网络推广代运营
  • 网页设计一般多少钱泰州seo网络公司
  • 毕业设计php做网站竞价推广账户托管
  • 七星彩网投网站建设官网排名优化
  • 江苏国泰做的网站案例seo课程多少钱
  • 模板和网站可以分开吗做网络优化哪家公司比较好
  • 柳州做网站的企业网推app
  • 做商品网站数据库有哪些内容互联网营销方案
  • 网站建设意见建议表深圳网站开发公司
  • 龙岗网站建设企业广告外链购买交易平台
  • 太原建站模板seo有哪些作用
  • 东莞网站建设技术支持建网站有哪些步骤
  • 深圳彩票网站建设百度权重怎么看
  • 网站备案号怎么做超链接app开发者需要更新此app
  • 重庆好的网站制作公司哪家好东莞做网站公司首选
  • 设计师赚钱的网站抖音优化
  • 做网站顺序网站流量数据
  • html企业网站实例百度问答一天能赚100块吗
  • wordpress 建站简单吗镇江seo优化
  • iis搭建网站教程win10西安网站seo哪家公司好
  • 国外手机模板网站推荐百度24小时客服电话136