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

怎么做网站的软文推广网站建设分金手指排名二七

怎么做网站的软文推广,网站建设分金手指排名二七,个人主页背景图,关于门户网站建设通报深入理解Eureka核心原理 Eureka整体设计Eureka服务端启动Eureka三级缓存Eureka客户端启动 Eureka整体设计 Eureka是一个经典的注册中心#xff0c;通过http接收客户端的服务发现和服务注册请求#xff0c;使用内存注册表保存客户端注册上来的实例信息。 Eureka服务端接收的… 深入理解Eureka核心原理 Eureka整体设计Eureka服务端启动Eureka三级缓存Eureka客户端启动 Eureka整体设计 Eureka是一个经典的注册中心通过http接收客户端的服务发现和服务注册请求使用内存注册表保存客户端注册上来的实例信息。 Eureka服务端接收的是http请求通过ApplicationResource接收服务注册请求通过ApplicationsResource接收服务发现请求这两个类相当于Spring MVC中的ControllerEureka使用的不是Spring MVC而是Jersey我们直接把他们当成Controller即可。 然后Eureka用一个内存实例注册表PeerAwareInstanceRegistry保存服务提供者注册上来的实例信息当ApplicationResource接收到服务注册请求时会把服务实例信息存入PeerAwareInstanceRegistry当ApplicationsResource接收到服务发现请求时会从PeerAwareInstanceRegistry拉取服务实例信息返回给客户端 public class ApplicationsResource {private final PeerAwareInstanceRegistry registry;... }public class ApplicationResource {private final PeerAwareInstanceRegistry registry;... }Eureka服务端启动 Eureka服务端启动时会初始化PeerAwareInstanceRegistry接口的实现类以及其他核心类除了初始化PeerAwareInstanceRegistry等一些核心类之外还会做两件事 从集群中的其他Eureka拉取服务实例列表注册到自己本地的服务注册表开启服务剔除定时任务定时扫描超过一定期限没有续约的服务实例把它剔除出内存注册表 初始化PeerAwareInstanceRegistry的代码在EurekaServerAutoConfiguration中通过Bean往Spring容器注册一个InstanceRegistry对象这个InstanceRegistry就是peerAwareInstanceRegistry的实现类。 Beanpublic PeerAwareInstanceRegistry peerAwareInstanceRegistry(ServerCodecs serverCodecs) {...return new InstanceRegistry(...);}EurekaServerAutoConfiguration还会通过Import注解导入一个EurekaServerInitializerConfiguration这个EurekaServerInitializerConfiguration的start()方法会触发集群同步和启动服务剔除定时任务。 Overridepublic void start() {new Thread(new Runnable() {Overridepublic void run() {try {// EurekaServerAutoConfiguration导入的EurekaServerBootstrap// 启动Eureka服务eurekaServerBootstrap.contextInitialized(EurekaServerInitializerConfiguration.this.servletContext);...}catch (...) {...}}}).start();}public void contextInitialized(ServletContext context) {try {//初始化Eureka运行环境initEurekaEnvironment();//初始化Eureka服务上下文initEurekaServerContext();...}catch (...) {...}}重点是initEurekaServerContext()方法 protected void initEurekaServerContext() throws Exception {...// 集群同步从集群中的其他Eureka实例拉取服务实例列表int registryCount this.registry.syncUp();// 启动服务提测定时任务this.registry.openForTraffic(this.applicationInfoManager, registryCount);...}Eureka三级缓存 Eureka处理服务发现请求时其实并不是直接读取内存注册表的而是读的缓存。Eureka除了内存注册表以外还有两个缓存一个是读写缓存readWriteCacheMap一个是只读缓存readOnlyCacheMap。内存注册表、readWriteCacheMap、readOnlyCacheMap三个组成了Eureka的三级缓存。其中readWriteCacheMap和readOnlyCacheMap被包装在一个ResponseCache对象中。整个三级缓存的结果就是这样 public class PeerAwareInstanceRegistryImpl extends AbstractInstanceRegistry implements PeerAwareInstanceRegistry {... }public abstract class AbstractInstanceRegistry implements InstanceRegistry {...protected volatile ResponseCache responseCache;...当ApplicationsResource接收到服务发现请求时 先从只读缓存中取如果只读缓存中没有则从读写缓存获取并且回写只读缓存如果读写缓存中也没有则从内存注册表中获取并回写到读写缓存。 Eureka会开启一个定时任务每隔30s从读写缓存同步数据到只读缓存。 ResponseCacheImpl#getValue Value getValue(final Key key, boolean useReadOnlyCache) {Value payload null;try {if (useReadOnlyCache) {// 从只读缓存取final Value currentPayload readOnlyCacheMap.get(key);if (currentPayload ! null) {payload currentPayload;} else {// 只读缓存没有则从读写缓存取回写只读缓存payload readWriteCacheMap.get(key);readOnlyCacheMap.put(key, payload);}} else {payload readWriteCacheMap.get(key);}} catch (...) {...}return payload;}readWriteCacheMap的类型是LoadingCacheLoadingCache是Guava库提供的一个本地缓存实现。当LoadingCache缓存缺失时LoadingCache会触发CacheLoader的load方法加载数据到缓存中此时就会从内存注册表中加载数据到readWriteCacheMap中。关于LoadingCache的使用、作用、原理等知识可以参考讲解Guava缓存相关的资料。 当ApplicationResource接收到服务注册请求时会把服务实例信息写入内存注册表并失效掉读写缓存然后把新注册上来的实例信息异步同步到集群中的其他Eureka节点。 PeerAwareInstanceRegistryImpl#register Overridepublic void register(final InstanceInfo info, final boolean isReplication) {...super.register(info, leaseDuration, isReplication);// 同步到集群中的其他Eureka节点replicateToPeers(Action.Register, info.getAppName(), info.getId(), info, null, isReplication);}AbstractInstanceRegistry#register public void register(InstanceInfo registrant, ...) {try {...// 失效读写缓存invalidateCache(registrant.getAppName(), registrant.getVIPAddress(), registrant.getSecureVipAddress());...} finally {...}}private void invalidateCache(String appName, Nullable String vipAddress, Nullable String secureVipAddress) {// invalidate cacheresponseCache.invalidate(appName, vipAddress, secureVipAddress);}Eureka客户端启动 Eureka的客户端启动时会创建一个DiscoveryClient对象它是Eureka的客户端对象它会创建两个定时任务一个异步延时任务。 两个定时任务 定时拉取服务实例列表服务发现定时发送心跳服务续约 一个延时任务服务注册。 DiscoveryClient的构造方法 InjectDiscoveryClient(...) {...initScheduledTasks();...}DiscoveryClient#initScheduledTasks private void initScheduledTasks() {if (clientConfig.shouldFetchRegistry()) {...// 开启服务发现定时任务scheduler.schedule(new TimedSupervisorTask(...new CacheRefreshThread()),registryFetchIntervalSeconds, TimeUnit.SECONDS);}if (clientConfig.shouldRegisterWithEureka()) {...// 开启服务续约定时发送心跳定时任务scheduler.schedule(new TimedSupervisorTask(...new HeartbeatThread()),renewalIntervalInSecs, TimeUnit.SECONDS);instanceInfoReplicator new InstanceInfoReplicator(...);...// 服务注册instanceInfoReplicator.start(...);} else {...}}它们都是通过Jersey客户端向Eureka服务端发起http请求。 其中服务发现的定时任务在首次拉取是会全量拉取后续会进行增量拉取。增量拉取返回的服务实例列表会合并到Eureka客户端的本地缓存中然后根据本地缓存的服务实例列表计算一个hashCode与Eureka服务端返回的hashCode进行比较如果不一致还要再进行一次全量拉取。 以上就是Eureka全部的核心原理下面放一张源码图对源码有兴趣的可以跟一跟没有兴趣的可以直接忽略。
http://www.hkea.cn/news/14496349/

相关文章:

  • python怎么开发网站wordpress 攻击
  • 建设监理杂志网站视频直播开发平台
  • 网站中英文切换代码网站搜索引擎
  • 网站设计需要什么软件支付宝小程序代理
  • 淮安网站建设价位个人网页设计理念
  • 中山手机网站设计网址推广
  • 东光网站制作做网站费用 会计分录
  • 摄影网站策划书做网站的合同
  • 中国婚恋网站排名网络营销方式举例
  • 在家做私房菜的网站郑州做网站哪家专业
  • 建设安全员协会网站抖音怎么挂小程序赚钱
  • 网站推荐2021辽宁省精神文明建设工作三大创建活动网站
  • 中国建设招标网 官方网站下载贵阳招聘网站建设
  • 销售网站模板十大酒店管理系统
  • 网站建设百度推广在线生成电子印章
  • 温州 网站开发管理系统平台
  • 淘宝网站基础建设 托管家具网站asp
  • 江苏赛孚建设工程有限公司网站手机软件开发
  • 网站商城支付接口怎么创造游戏软件
  • 高端网站建设公司服务好吗网站开发合同及报价
  • wordpress登陆口win7优化大师好不好
  • 电影网站建设需求分析应用软件是什么
  • 顺义区快速建站做搜索引擎的网站有哪些
  • 苏州全网网站建设超变传奇网站
  • 法拍房北京网站wordpress加速优化服务器
  • 室内设计网站界面百度收录多的是哪些网站
  • 西安网站手机网站建设网站域名没有实名认证
  • 秦皇岛 网站百度怎么优化排名
  • 内容聚合网站开发教程国外网站如何做推广
  • 怎么找淘宝客网站seo网站开发