经过上一篇博客 Eureka详解系列(一)--先谈谈负载均衡器 ,咱们知道了 Eureka 是什么以及为何要使用它,今天,咱们开始研究如何使用 Eureka。html
在此以前,先说明一点。网上几乎全部关于 Eureka 的文章都是基于 Spring 的,但本文的例子不会有任何 Spring 的代码,我尽可能使用 Eureka 原生的 API,后面的源码分析也是如此。由于 Spring 把 Eureka 藏得越好,咱们研究起来就会越困难,毕竟我写这个系列不是只为了学会怎么使用 Eureka,咱们还要分析它的源码。固然,实际项目中就不必这么搞了。java
另外,这只是一个简单的例子,只配置了几个必备的参数,下篇博客会展开分析。git
os:win 10github
jdk:1.8.0_231web
eureka:1.10.11spring
tomcat:9.0.21tomcat
maven:3.6.3app
经过 Eureka 的结构图能够知道,咱们须要分别搭建 Eureka Server、Eureka Client for application service、Eureka Client for application client 三个模块。负载均衡
我参考了官网的例子,并作了一点小改动,代码和配置就不一一列出了,具体源码见文末连接。框架
咱们须要按照顺序运行它们。
eureka-server 使用 jersey 做 Web 框架(jersey 和 struts二、springMVC 做用差很少,没接触过也不碍事),项目最终要打包成 war 包运行在 tomcat 上。项目的运行方法以下:
mvn clean package
将项目打包成 eureka.war。补充一点,官方提供了基于 java 实现的 Eureka Client 来与 Eureka Server 进行交互,其实,咱们也能够直接使用 rest 请求,例如,经过 http://127.0.0.1:8080/eureka/v2/apps 能够获取全部的服务列表。当咱们的客户端不支持 java 时,这些接口将很是有用,具体接口能够参考官网。在项目中,咱们查找包含javax.ws.rs.Path
注解的类,也能够找到这些接口。
eureka-service 的实现比较简单,它先把本身注册到 Eureka Server,而后一直监听 application client 的消费,监听到后,只进行简单的交互后就直接关闭客户端。代码简化以下:
// 建立ApplicationInfoManager对象(用来注册、注销当前实例) ApplicationInfoManager applicationInfoManager = new ApplicationInfoManager( new MyDataCenterInstanceConfig(), new EurekaConfigBasedInstanceInfoProvider(instanceConfig).get()); // 建立EurekaClient对象(用来获取其余服务以及提供内部入口用来注册、续约、和注销当前实例) EurekaClient eurekaClient = new DiscoveryClient(applicationInfoManager, new DefaultEurekaClientConfig()); // 设置当前实例状态为STARTING applicationInfoManager.setInstanceStatus(InstanceInfo.InstanceStatus.STARTING); // 设置当前实例状态为UP----》这个时候会向Eureka Server注册本身 applicationInfoManager.setInstanceStatus(InstanceInfo.InstanceStatus.UP); // 和application client交互 // ······ // 关闭客户端,同时也会注销当前实例 eurekaClient.shutdown();
操做方法很简单,只要运行ExampleEurekaService.main
方法就行。当控制台出现"Service started and ready to process requests.."时,说明当前实例已经注册到 Eureka Server,而且准备被消费。
eureka-client 项目的具体逻辑为:从 Eureka Server 上获取到注册表,而后和 application service 交互,获得响应后直接关闭客户端。代码简化以下:
// 建立ApplicationInfoManager对象(用来注册、注销当前实例) ApplicationInfoManager applicationInfoManager = new ApplicationInfoManager( new MyDataCenterInstanceConfig(), new EurekaConfigBasedInstanceInfoProvider(instanceConfig).get()); // 建立EurekaClient对象(用来获取其余服务以及提供内部入口用来注册、续约、和注销当前实例) EurekaClient eurekaClient = new DiscoveryClient(applicationInfoManager, new DefaultEurekaClientConfig()); // 获取指定服务的实例对象 InstanceInfo nextServerInfo = eurekaClient.getNextServerFromEureka(vipAddress, false); // 和application service交互 // ······ // 关闭客户端 eurekaClient.shutdown();
直接运行ExampleEurekaClient.main
就行。咱们能够从控制台看到整个过程。
以上,经过一个简单的例子,咱们实现了将服务注册到 Eureka Server 以及正常地消费它。这是很是“入门级”的例子,下篇博客咱们再深刻研究各类配置参数的做用。
最后,感谢阅读。
https://github.com/Netflix/eureka/wiki/Eureka-at-a-glance
本文为原创文章,转载请附上原文出处连接:https://www.cnblogs.com/ZhangZiSheng001/p/14337985.html