博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringCloud源码学习(一) Eurake服务注册的实现细节
阅读量:4212 次
发布时间:2019-05-26

本文共 2282 字,大约阅读时间需要 7 分钟。

SpringCloud微服务治理模块Eurake是开发SpringCloud项目必须要面对的。我们都知道我们要想将我们的服务注册到Eurake注册中心就必须要在项目中加入相关的依赖jar包并且要开启服务发现的注解。说到注解,我都知道SpringBoot的注解可以是组合,的所以这个@EnableDiscoveryClient注解应该是需要Import其他的类或者扫描相关的包。

从图中可以看出确实是Import进来一个类。Import的原理上期我们已经学习了。那么我们看看这个类是做这些工作的。查看源代码发现这个selectImports方法就是想让Spring去实例化一个AutoServiceRegistrationConfiguration。这里有一个autoRegister的标志,说明我们可以在@EnableDiscoveryClient中指明是否要向注册中心注册,这样就可以让我们在非微服务项目中继续保留服务注册发现的模块了。

那么我们就看看这个类到底是何方圣神。

发现里边还是嵌套一个配置文件。但是并没有像我们做到那样直接向外暴露一个bean,但是如果Spring扫描到这里的话,其实也可以访问到该包中其他的bean,发现这里有个AutoConfiguration的配置类。

直接看这个AutoConfiguration类都做了哪些事情吧!我们发现配置properties并没有用。所以这块我们先重点看一下autoServiceRegistration的具体功能。

发现这里的autoServiceRistration的实现有两个,一个是虚方法,另一种就是我们的Eurake实现。显然虚方法就是默认实现或者调度作用,但是这两者并没有继承关系。所以就当作默认实现看待吧,重点看一下Eurake方法。

看到这个lifecycle,我们之前分析的在Spring所有操作进行完毕的时候会调lifecycle的接口。显然我们看到这里的方法start();但是在想此类应该是不能存在spring中的,因为他没有Spring支持的注解。但是根据我们之前的学习,@Import可以将没有Spring注解的bean注册到Spring容器中。我们看到在上图的config目录中有很多的自动配置,如果不出意外就在哪里了。

而这两个Bean应该就和服务注册和发现有关系。我们暂时先放一放。我们去看那个start方法。

public EurekaAutoServiceRegistration(ApplicationContext context, EurekaServiceRegistry serviceRegistry, EurekaRegistration registration) {        //Spring上下文        this.context = context;        //向服务注册中心进行注册的服务        this.serviceRegistry = serviceRegistry;        //需要被注册的服务的一些服务信息        this.registration = registration;    }    public void start() {        if (this.port.get() != 0 && this.registration.getNonSecurePort() == 0) {            this.registration.setNonSecurePort(this.port.get());        }      //如果没有启动        if (!this.running.get() && this.registration.getNonSecurePort() > 0) {            //将服务注册到注册中心            this.serviceRegistry.register(this.registration);            //发布下事件,事件中包含了向注册中心注册的所有信息体            this.context.publishEvent(new InstanceRegisteredEvent(this, this.registration.getInstanceConfig()));            //设置已经成功了            this.running.set(true);        }    }

通过上边的分析,我们可以使用Spring广播或者注入EurekaRegistration 的方式就可以直接拿到向Eurake注册的服务信息。

至此我们已经明白了Eurake的服务注册的基本过程,但是对于serviceRegistry 的解析肯定是重中之重,这个我们下期再学习。总结一下今天的学习,大概就是Eurake通过Enable的Import注解先让代码进入Enable的包但是并没有向外暴露一些核心的bean,而是通过SpringCloud的Common包的自动扫描出来的。向外暴露的核心在EurakeClientAutoConfiguration类中。如果要做一些定制化话开发我们也可以通过广播或者注入EurekaRegistration 拿到服务的信息。

至于为何会扫描到这里的问题就是spring.factories文件的事情了。

转载地址:http://thkmi.baihongyu.com/

你可能感兴趣的文章
【IOS游戏开发】之测试发布(Distribution)
查看>>
【IOS游戏开发】之IPA破解原理
查看>>
【一天一道LeetCode】#45. Jump Game II
查看>>
【一天一道LeetCode】#46. Permutations
查看>>
【一天一道LeetCode】#47. Permutations II
查看>>
【一天一道LeetCode】#56. Merge Intervals
查看>>
【一天一道LeetCode】#58. Length of Last Word
查看>>
【一天一道LeetCode】#59. Spiral Matrix II
查看>>
【一天一道LeetCode】#30. Substring with Concatenation of All Words
查看>>
【一天一道LeetCode】#60. Permutation Sequence.
查看>>
【一天一道LeetCode】#113. Path Sum II
查看>>
【一天一道LeetCode】#114. Flatten Binary Tree to Linked List
查看>>
【unix网络编程第三版】阅读笔记(二):套接字编程简介
查看>>
【一天一道LeetCode】#115. Distinct Subsequences
查看>>
【一天一道LeetCode】#116. Populating Next Right Pointers in Each Node
查看>>
【一天一道LeetCode】#117. Populating Next Right Pointers in Each Node II
查看>>
【一天一道LeetCode】#118. Pascal's Triangle
查看>>
同步与异步的区别
查看>>
IT行业--简历模板及就业秘籍
查看>>
JNI简介及实例
查看>>