集团主站
欢迎来到成都达内官方网站!达内—美国上市公司 亿元级外企IT培训企业!
成都it培训哪家好
成都it培训哪家好
全国服务监督电话:400-111-8989  |   联系客服   |
当前位置:主页 > 培训课程 > Java >

成都Java开发工程师:轻量级RPC设计与实现第五版

发布者: 成都达内     浏览次数:     发布时间:2020-02-20 11:03:41

在最近一段时间里,通过搜集有关资料加上自己的理解,设计了一款轻量级RPC,起了一个名字lightWeightRPC。它拥有一个RPC常见的基本功能。成都Java开发工程师主要功能和特点如下...

  在最近一段时间里,通过搜集有关资料加上自己的理解,设计了一款轻量级RPC,起了一个名字lightWeightRPC。它拥有一个RPC常见的基本功能。成都Java开发工程师主要功能和特点如下:

  利用Spring实现依赖注入与参数配置

  利用Netty来实现客户端与服务端的远程通信

  利用Hessian来实现序列化

  设置Zookeeper作为注册中心

  新设监控器,通过心跳机制来判断服务端与监控器的网络连接状况,当出现不稳定时,认为服务端出现了问题,在注册中心删除相关的服务信息。

  利用Netty的Promise来实现异步的传送

  构建线程池来管理发送的请求线程

  添加服务缓存机制,在注册中心宕机的情况下仍能进行服务消费。

  支持服务扩展点发现机制(SPI),对Spring的SPI机制进行改进,解决了依赖注入问题。

  在客户端从注册中心获取服务时,添加监听器,当注册中心对应节点发生变化时通知客户端修改本地缓存信息。

  以上是lightWeightRPC的全部功能,本版本添加的内容就是最后一个功能,为服务节点添加监听器。

  因为之前在本地添加了持久化的缓存,当服务消费时会先从缓存中查找信息,查不到再到注册中心查找,但是当服务地址等信息发生变化时,如果不对缓存信息进行修改就可能会发生错误。所以在本版本中为服务节点添加了监听器。

  成都Java开发工程师:轻量级RPC设计与实现第五版

  1|0如何添加监听器

  当客户端首次从注册中心获取服务信息时,会对有关服务节点添加监听器,具体方法在addListenerForService,设置完监听后,再获取相关服务节点信息,并封装在URL类中。

  public static List getServiceInfo(String interfaceName) {

  try {

  addListenerForService(interfaceName);

  System.out.println("开始查找服务节点:" + getPath(interfaceName));

  List urlList = client.getChildren().forPath("/" + interfaceName);

  System.out.println("结果:" + urlList);

  List result = new ArrayList<>();

  for(String serviceUrl : urlList) {

  String[] urls = serviceUrl.split(":");

  String implClassName = get(interfaceName, serviceUrl);

  System.out.println(implClassName);

  result.add(new URL(urls[0], Integer.valueOf(urls[1]), interfaceName, implClassName));

  }

  return result;

  } catch (Exception e) {

  System.out.println(e);

  e.printStackTrace();

  }

  return null;

  }

  在添加监听器时主要是PathChildrenCache类,当节点发生变化时会触发childEvent事件,根据不同的状态采取不同的策略。

  final PathChildrenCache childrenCache = new PathChildrenCache(client, getPath(serviceName), true);

  //同步初始监听点childrenCache.start(PathChildrenCache.StartMode.POST_INITIALIZED_EVENT);

  childrenCache.getListenable().addListener(new PathChildrenCacheListener(){

  @Override

  public void childEvent(CuratorFramework client, PathChildrenCacheEvent event) throws Exception { if(event.getType().equals(PathChildrenCacheEvent.Type.INITIALIZED)) {

  //建立完监听

  return;

  }

  //删除远程服务节点

  if (event.getType().equals(PathChildrenCacheEvent.Type.CHILD_REMOVED)) {

  String path = event.getData().getPath();

  FileUtil fileUtil = new FileUtil(true);

  fileUtil.alterServiceCache(serviceName, path);

  }

  至此,成都Java开发工程师一个RPC设计完成了,有一些不足,希望大家多多指正。

(责任编辑:范老师)
最新开班
  • 成都Java培训班
    免费试听名额发放中...
  • 成都C++培训班
    免费试听名额发放中...
  • 成都PHP培训班
    免费试听名额发放中...
  • 成都网络工程培训班
    免费试听名额发放中...
  • 成都Unity3D培训班
    免费试听名额发放中...
  • 成都大数据培训班
    免费试听名额发放中...
  • 成都uid培训班
    免费试听名额发放中...
  • 成都会计培训班
    免费试听名额发放中...
  • 成都Python培训班
    免费试听名额发放中...
  • 成都嵌入式培训班
    免费试听名额发放中...
  • 成都web培训班
    免费试听名额发放中...
  • 成都软件测试培训班
    免费试听名额发放中...
在线留言
提交

校区地址:成都市锦江区东大街紫东楼端35号明宇金融广场19楼1906室

联系电话:400-111-8989

公交路线:芷泉街(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:成都市高新区奥克斯广场蜀锦路209号一楼商铺

联系电话:400-111-8989

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

校区地址:成都锦江区东大街芷泉街229号东方广场C座3楼303

联系电话:400-111-8989

公交路线:芷泉街(188路;115路;515路;236路;505路;501路;84路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:成都市武侯区佳灵路3号红牌楼广场2号写字楼11楼1115号

联系电话:400-111-8989

公交路线:红牌楼东(11路;92路;100路;111路;139路;g28路;快速公交K1/K2) 地铁路线:红牌楼站(地铁3号线)

校区地址:成都市锦江区红星路二段70号四川日报大厦502-2

联系电话:400-111-8989

公交路线:市二医院站(6路;49路;102路;5路;37路;g92路;) 地铁路线:地铁市二医院(地铁3号线)

校区地址:成都市锦江区东大街芷泉段229号东方广场C座16层

联系电话:400-111-8989

公交路线:芷泉街(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:四川省成都市武侯区高新科技孵化园9号园区E座7楼

联系电话:400-111-8989

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

了解达内动态
关注成都达内教育公众号

首页 | 关于达内 | 课程中心 | 专家师资 | 视频教程 | 学员空间 | 校企合作 | 新闻资讯 | 就业指导 | 网站地图

2016-2025 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56 蜀ICP备18021046号-3