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

单位网站建设汇报建一个大型网站需要多少钱

单位网站建设汇报,建一个大型网站需要多少钱,手把手教你入侵网站修改数据,营销型企业网站的含义Nacos客户端服务注册源码分析 服务注册信息 ​ 我们从Nacos-Client开始说起#xff0c;那么说到客户端就涉及到服务注册#xff0c;我们先了解一下Nacos客户端都会将什么信息传递给服务器#xff0c;我们直接从Nacos Client项目的NamingTest说起 public class NamingTest…Nacos客户端服务注册源码分析 服务注册信息 ​ 我们从Nacos-Client开始说起那么说到客户端就涉及到服务注册我们先了解一下Nacos客户端都会将什么信息传递给服务器我们直接从Nacos Client项目的NamingTest说起 public class NamingTest {Testpublic void testServiceList() throws Exception {Properties properties new Properties();properties.put(PropertyKeyConst.SERVER_ADDR, 127.0.0.1:8848);properties.put(PropertyKeyConst.USERNAME, nacos);properties.put(PropertyKeyConst.PASSWORD, nacos);Instance instance new Instance();instance.setIp(1.1.1.1);instance.setPort(800);instance.setWeight(2);MapString, String map new HashMapString, String();map.put(netType, external);map.put(version, 2.0);instance.setMetadata(map);NamingService namingService NacosFactory.createNamingService(properties);namingService.registerInstance(nacos.test.1, instance);ThreadUtils.sleep(5000L);ListInstance list namingService.getAllInstances(nacos.test.1);System.out.println(list);ThreadUtils.sleep(30000L);// ExpressionSelector expressionSelector new ExpressionSelector();// expressionSelector.setExpression(INSTANCE.metadata.registerSource dubbo);// ListViewString serviceList namingService.getServicesOfServer(1, 10, expressionSelector);} }​ 其实这就是客户端注册的一个测试类它模仿了一个真实的服务注册进Nacos的过程包括NacosServer连接、实例的创建、实例属性的赋值、注册实例所以在这个其中包含了服务注册的核心代码仅从此处的代码分析可以看出Nacos注册服务实例时包含了两大类信息Nacos Server连接信息和实例信息。 Nacos Server连接信息 Nacos Server连接信息存储在Properties当中包含以下信息 Server地址Nacos服务器地址属性的key为serverAddr用户名连接Nacos服务的用户名属性key为username默认值为nacos密码连接Nacos服务的密码属性key为password默认值为nacos 实例信息 注册实例信息用Instance对象承载注册的实例信息又分两部分实例基础信息和元数据。 实例基础信息包括 instanceId实例的唯一IDip实例IP提供给消费者进行通信的地址port 端口提供给消费者访问的端口weight权重当前实例的权限浮点类型默认1.0Dhealthy健康状况默认trueenabled实例是否准备好接收请求默认trueephemeral实例是否为瞬时的默认为trueclusterName实例所属的集群名称serviceName实例的服务信息 Instance类包含了实例的基础信息之外还包含了用于存储元数据的metadata描述数据的数据类型为HashMap从当前这个Demo中我们可以得知存放了两个数据 netType顾名思义网络类型这里的值为external也就是外网的意思version版本Nacos的版本这里是2.0这个大版本。 除了Demo中这些“自定义”的信息在Instance类中还定义了一些默认信息这些信息通过get方法提供 public long getInstanceHeartBeatInterval() {return getMetaDataByKeyWithDefault(PreservedMetadataKeys.HEART_BEAT_INTERVAL,Constants.DEFAULT_HEART_BEAT_INTERVAL); }public long getInstanceHeartBeatTimeOut() {return getMetaDataByKeyWithDefault(PreservedMetadataKeys.HEART_BEAT_TIMEOUT,Constants.DEFAULT_HEART_BEAT_TIMEOUT); }public long getIpDeleteTimeout() {return getMetaDataByKeyWithDefault(PreservedMetadataKeys.IP_DELETE_TIMEOUT,Constants.DEFAULT_IP_DELETE_TIMEOUT); }public String getInstanceIdGenerator() {return getMetaDataByKeyWithDefault(PreservedMetadataKeys.INSTANCE_ID_GENERATOR,Constants.DEFAULT_INSTANCE_ID_GENERATOR); }上面的get方法在需要元数据默认值时会被用到 preserved.heart.beat.interval心跳间隙的key默认为5s也就是默认5秒进行一次心跳preserved.heart.beat.timeout心跳超时的key默认为15s也就是默认15秒收不到心跳实例将会标记为不健康preserved.ip.delete.timeout实例IP被删除的key默认为30s也就是30秒收不到心跳实例将会被移除preserved.instance.id.generator实例ID生成器key默认为simple 这些都是Nacos默认提供的值也就是当前实例注册时会告诉Nacos Server说我的心跳间隙、心跳超时等对应的值是多少你按照这个值来判断我这个实例是否健康。 有了这些信息我们基本是已经知道注册实例时需要传递什么参数需要配置什么参数了。 NamingService接口 ​ NamingService接口是Nacos命名服务对外提供的一个统一接口看对应的源码就可以发现它提供了大量实例相关的接口方法 服务实例注册 void registerInstance(...) throws NacosException;服务实例注销 void deregisterInstance(...) throws NacosException;获取服务实例列表 ListInstance getAllInstances(...) throws NacosException;查询健康服务实例 ListInstance selectInstances(...) throws NacosException;查询集群中健康的服务实例 ListInstance selectInstances(....ListString clusters....)throws NacosException;使用负载均衡策略选择一个健康的服务实例 Instance selectOneHealthyInstance(...) throws NacosException;订阅服务事件 void subscribe(...) throws NacosException;取消订阅服务事件 void unsubscribe(...) throws NacosException;获取所有或指定服务名称 ListViewString getServicesOfServer(...) throws NacosException;获取所有订阅的服务 ListServiceInfo getSubscribeServices() throws NacosException;获取Nacos服务的状态 String getServerStatus();主动关闭服务 void shutDown() throws NacosException在这些方法中提供了大量的重载方法应用于不同场景和不同类型实例或服务的筛选所以我们只需要在不同的情况下使用不同的方法即可。 NamingService的实例化是通过NamingFactory类和上面的Nacos服务信息从代码中可以看出这里采用了反射机制来实例化NamingService具体的实现类为NacosNamingService public static NamingService createNamingService(Properties properties) throws NacosException {try {Class? driverImplClass Class.forName(com.alibaba.nacos.client.naming.NacosNamingService);Constructor constructor driverImplClass.getConstructor(Properties.class);return (NamingService) constructor.newInstance(properties);} catch (Throwable e) {throw new NacosException(NacosException.CLIENT_INVALID_PARAM, e);} }NacosNamingService的实现 ​ 在示例代码中使用了NamingService的registerInstance方法来进行服务实例的注册该方法接收两个参数服务名称和实例对象。这个方法的最大作用是设置了当前实例的分组信息。我们知道在Nacos中通过Namespace、group、Service、Cluster等一层层的将实例进行环境的隔离。在这里设置了默认的分组为“DEFAULT_GROUP”。 Override public void registerInstance(String serviceName, Instance instance) throws NacosException {registerInstance(serviceName, Constants.DEFAULT_GROUP, instance); }紧接着调用的registerInstance方法如下这个方法实现了两个功能 ​ 第一检查心跳时间设置的对不对心跳默认为5秒 ​ 第二通过NamingClientProxy这个代理来执行服务注册操作 Override public void registerInstance(String serviceName, String groupName, Instance instance) throws NacosException {NamingUtils.checkInstanceIsLegal(instance);//检查心跳clientProxy.registerService(serviceName, groupName, instance);//通过代理执行服务注册操作 }通过clientProxy我们发现NamingClientProxy这个代理接口的具体实现是有NamingClientProxyDelegate来完成的这个可以从NacosNamingService构造方法中来看出。 public NacosNamingService(Properties properties) throws NacosException {init(properties); }初始化在init方法中 private void init(Properties properties) throws NacosException {ValidatorUtils.checkInitParam(properties);this.namespace InitUtils.initNamespaceForNaming(properties);InitUtils.initSerialization();InitUtils.initWebRootContext(properties);initLogName(properties);this.changeNotifier new InstancesChangeNotifier();NotifyCenter.registerToPublisher(InstancesChangeEvent.class, 16384);NotifyCenter.registerSubscriber(changeNotifier);this.serviceInfoHolder new ServiceInfoHolder(namespace, properties);this.clientProxy new NamingClientProxyDelegate(this.namespace, serviceInfoHolder, properties, changeNotifier);//在这里进行了初始化并看出使用的是NamingClientProxyDelegate来完成的 }NamingClientProxyDelegate中实现 根据上方的分析和源码的阅读我们可以发现NamingClientProxy调用registerService实际上调用的就是NamingClientProxyDelegate的对应方法 Override public void registerService(String serviceName, String groupName, Instance instance) throws NacosException {getExecuteClientProxy(instance).registerService(serviceName, groupName, instance); }真正调用注册服务的并不是代理实现类而是根据当前实例是否为瞬时对象来选择对应的客户端代理来进行请求的 如果当前实例为瞬时对象则采用gRPC协议NamingGrpcClientProxy进行请求否则采用http协议NamingHttpClientProxy进行请求。默认为瞬时对象也就是说2.0版本中默认采用了gRPC协议进行与Nacos服务进行交互。 private NamingClientProxy getExecuteClientProxy(Instance instance) {return instance.isEphemeral() ? grpcClientProxy : httpClientProxy; }NamingGrpcClientProxy中实现 关于gRPC协议NamingGrpcClientProxy我们后续在做展开我们主要关注一下registerService方法实现这里其实做了两件事情 缓存当前注册的实例信息用于恢复缓存的数据结构为ConcurrentMapString, Instancekey为“serviceNamegroupName”value就是前面封装的实例信息。另外一件事就是封装了参数基于gRPC进行服务的调用和结果的处理。 Override public void registerService(String serviceName, String groupName, Instance instance) throws NacosException {NAMING_LOGGER.info([REGISTER-SERVICE] {} registering service {} with instance {}, namespaceId, serviceName,instance);redoService.cacheInstanceForRedo(serviceName, groupName, instance);//缓存数据doRegisterService(serviceName, groupName, instance);//基于gRPC进行服务的调用 }总结流程 汇总流程图
http://www.dnsts.com.cn/news/164760.html

相关文章:

  • 手机有软件做ppt下载网站有哪些内容做论坛网站需要多少钱
  • 网站建设板块如何分类网站优化站外链接怎么做
  • 长沙做网站企业wordpress控制
  • 网站建设岗位要求电信网站服务器
  • 工作室图片 实拍网站优化是怎么做的
  • 闵行网站建设公司纸上海建设安全协会官网
  • 无锡网站建设公司广东建设厅证件查询网站
  • 商务网站创建wordpress后台安装
  • 福州建设工程协会网站查询免费seo网站诊断免费
  • 如何用wordpress建站网站备案专员
  • wordpress模板代码wordpress插件dx seo下载
  • 招聘网站开发计划做问卷的网站哪个好
  • 做的网站浏览的越多越挣钱编辑目录中的字体wordpress
  • 河南住房与建设厅网站软件定制开发如何做
  • 做私活 网站wordpress导航页
  • 青岛建设英文网站建设和城乡建设厅网站
  • 阿里云可以做电商网站吗wordpress获取当前用户id
  • 辽宁城乡建设部网站首页手机网站如何做外链
  • 汉化主题做网站网页魔域
  • 怎么做网站维护宣传人人站cms
  • 网站提交订单付款才跳转怎么做做公众号文章的网站
  • 阿里巴巴国际站怎么找客户淘客网站 wordpress
  • 手机网站 开发者模式天津建设信息网站
  • 云购网站建设SEO网站链接模型
  • 住房与建设部网站wordpress给图片加logo
  • 网站开发的前后端是哪些wordpress 字体 插件下载地址
  • 建设厅网站装修合同模板苏州网站建设哪家更好
  • 建站历史查询企业网站策划案例
  • 黄骅市网站建设公司哪里学网站建设与管理
  • 网统管公司的网站托管服务怎么样珠海网站建设 旭洁