暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Eureka源码解析-环境搭建

魏卯卯 2021-02-06
891

概述:

Eureka 项目地址:https://github.com/Netflix/eureka

请注意下,不是 spring-cloud-netflix-eureka-client
/ spring-cloud-netflix-eureka-server
而是netfilx中的项目。springCloud中的只是把netfilx的eureka进行了封装。

目录结构

(1)eureka-client:这个就是指的eureka的客户端,注册到eureka上面去的一个服务,就是一个eureka client
,无论是你要注册,还是要发现别的服务,无论是服务提供者还是服务消费者,都是一个eureka客户端。

(2)eureka-core:这个就是指的eureka的服务端,其实就是eureka的注册中心。

(3)eureka-resources:这个是基于jsp开发的eureka控制台,运维后台界面。

(4)eureka-server:将 eureka-client
+ eureka-core
+ eureka-resources
三者打包成 war
包。

(5)eureka-examples:eureka使用的例子

(6)eureka-test-utils:eureka的单元测试工具类

(7)eureka-client-jersey2/eureka-core-jersey2:是对jersey的一个封装。jersey就相当于一个类似于springMVC的框架,可以向外提供http请求。

(8)其他模块非主要模块,可以不了解。

搭建Eureka调试环境

启动eureka注册中心

eureka-server
的src/test/java下,有一个com.netflix.eureka.resources
包,里面有一个EurekaClientServerRestIntegrationTest
类,我们就通过这个类的示例代码,尝试手动启动Eureka注册中心。

有一个setUp()方法,就是会在运行集成测试之前,调用startServer()方法先启动注册中心。

所以我们在startServer()里面替换掉一些代码,直接就把注册中心给跑起来。

修改前:

   private static void startServer() throws Exception {
File warFile = findWar();


server = new Server(8080);


WebAppContext webapp = new WebAppContext();
webapp.setContextPath("/");
webapp.setWar(warFile.getAbsolutePath());
server.setHandler(webapp);


server.start();


eurekaServiceUrl = "http://localhost:8080/v2";
}

修改后:

private static void startServer() throws Exception {
server = new Server(8080);


WebAppContext webAppCtx = new WebAppContext(new File("./src/main/webapp").getAbsolutePath(), "/");
webAppCtx.setDescriptor(new File("./src/main/webapp/WEB-INF/web.xml").getAbsolutePath());
webAppCtx.setResourceBase(new File("./src/main/resources").getAbsolutePath());
webAppCtx.setClassLoader(Thread.currentThread().getContextClassLoader());
server.setHandler(webAppCtx);
server.start();


eurekaServiceUrl = "http://localhost:8080/v2";
}

随便在此类里面启动一个单元测试查看是否启动成功。

在setUp()方法里加入:Thread.sleep(Long.MAX_VALUE),就是让他启动之后就hang住,然后可以用别的client去注册他。

上面的那段代码啥意思呢?原先代码是先把eureka-server打成一个war包,然后找到那个war包去启动,但是太麻烦了每次都打包耗费时间。现在这段代码,直接就是自己加载eureka-server的各种资源,比如web.xml、配置文件等,然后直接就启动注册中心了。

启动eureka客户端

我们可以通过eureka-examples
模块中src/main/java
com.netflix.eureka
包下,有个ExampleEurekaClient类,就用此来模拟eureka客户端。

然后再在启动eureka注册中心的那个测试类(eureka-server模块下的EurekaClientServerRestIntegrationTest类)里面找到injectEurekaConfiguration方法。

复制这个方法到ExampleEurekaClient类里,然后在这个类的main()的第一行,就加入这个方法的调用,意思就是提前设置好一些参数。

然后就可以运行main方法,向注册中心发送请求就可以开始调试了。
文章转载自魏卯卯,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论