Eureka不会进行二次同步注册信息
Eureka会将本实例中的注册信息同步到它的peer节点上,这是我们都知道的特性。然而,当peer节点收到同步数据后,并不会将这些信息再同步到它自己的peer节点上。如果有A, B, C三个实例,A配B, B配C, C配A, 那么当向A注册一个新服务时,只有A, B两个Eureka实例会有新服务的注册信息,C是没有的。这一点在官方wiki上并没有明确说明。下面通过源码来查找一下原因。
构建
Eureka当前版本 (https://github.com/Netflix/eureka) 使用gradle作为构建工具,不过git仓库里提供了gradlew,所以也不用我们自己去下载。如果自己下载了gradle的最新版本3.X,那么反而会因为兼容性问题导致构建失败,因为官方使用的是2.1.0版本。构建之前一定要科学上网,否则很多依赖是下载不到的:
./gradlew build -x test // 跳过测试
源码定位与分析
Eureka本质上是一个Servlet应用,它使用jersey作为RESTful框架来构造自己的REST服务。在eureka-server模块中可以找到web.xml文件,在build/libs目录下可以看到构建完成后生成的war包。我们要找的代码,在eureka-core模块的com.netflix.eureka.resource包下。jersey相比SpringMVC来说它是一个更加标准的HTTP RESTful框架,因此很自然可以猜想到resource就是请求路由所在的包。
查阅官方wiki, 我们知道eureka对外暴露接口的形式为:
GET/POST/PUT/DELETE /eureka/v2/apps/{APP-ID}
我们在ApplicationsResource类中可以发现如下注解:
@Path("/{version}/apps")
@Produces({
"application/xml", "application/json"})
public class ApplicationsResource {
// ...

最低0.47元/天 解锁文章
1752





