参考视频
1.Eureka Server集群概述
微服务的所有操作都依赖于 Eureka Server ,一旦其宕机,整个系统都无法正常运作。因此我们可以部署多个 Eureka Server 以搭建集群,提高其可用性。
2.Eureka Server集群搭建
集群搭建的核心有三点(针对三个不同角色):
- Eureka Server:彼此间相互注册,且相互拉取注册信息;
- 提供者:需要同时注册到多台 Eureka Server;
- 调用者:可以从多台 Eureka Server 拉取注册信息。
3.演示 - 在本机使用三个Eureka Server实例搭建集群
-
[创建项目] 创建好项目,结构如下:
-
[配置EurekaServer]
-
[相互注册]:每台 Eureka Server 都需要注册到其他的 Eureka Server 上,即A注册到BC、B注册到AC、C注册到AB。它们的配置文件如下:
server.port=9001 # 服务名 spring.application.name=eureka_server_01 # Eureka Server的请求地址 eureka.client.service-url.defaultZone=http://localhost:9002/eureka/, http://localhost:9003/eureka/
server.port=9002 # 服务名 spring.application.name=eureka_server_02 # Eureka Server的请求地址 eureka.client.service-url.defaultZone=http://localhost:9001/eureka/, http://localhost:9003/eureka
server.port=9003 # 服务名 spring.application.name=eureka_server_03 # Eureka Server的请求地址 eureka.client.service-url.defaultZone=http://localhost:9001/eureka/, http://localhost:9002/eureka/
-
[启用EurekaServer]:在所有 Eureka Server 启动类上添加
@EnableEurekaServer
;
-
-
[配置provider_01和consumer_01]
-
[服务注册]:它们本质上也是微服务,因此都需要注册到 Eureka Server ,且需要同时注册到所有的实例上;
server.port=8091 # 服务名 spring.application.name=provider_01 # Eureka Server的请求地址 eureka.client.service-url.defaultZone=http://localhost:9001/eureka/, http://localhost:9002/eureka/, http://localhost:9003/eureka/
server.port=8081 # 服务名 spring.application.name=consumer_01 # Eureka Server的请求地址 eureka.client.service-url.defaultZone=http://localhost:9001/eureka/, http://localhost:9002/eureka/, http://localhost:9003/eureka/
-
[启用EurekaClient]:在它们的启动类代码上添加
@EnableEurekaClient
;
-
-
[定义接口] 分别定义好 提供者 的接口和 调用者 的接口;
-
[提供者]
@CrossOrigin @RestController @RequestMapping("/hello") public class HelloController { @GetMapping("say") public String say() { return "Hello World!"; } }
-
[调用者]
@CrossOrigin @RestController @RequestMapping("/hello") public class HelloController { @Resource private RestTemplate restTemplate; @Resource private EurekaClient eurekaClient; @GetMapping("/sayByRestTemplate") public String sayByRestTemplate() { // 获取实例的所有元数据 Application app = eurekaClient.getApplication("provider_01"); InstanceInfo instanceInfo = app.getInstances().get(0); // 获取ip地址和端口号 String ipAddress = instanceInfo.getIPAddr(); int port = instanceInfo.getPort(); // 拼接url,发起http请求 String url = "http://" + ipAddress + ":" + port + "/hello/say"; String result = restTemplate.getForObject(url, String.class); return "发起Http请求得到的响应结果:" + result; } }
-
-
[启动项目检验结果] 启动所有的项目
-
[访问EurekaServer] 在浏览器输入
http://localhost:端口号
,端口号可以是任意一个 Eureka Server 的端口; -
[测试接口] 输入
http://localhost:8081/hello/sayByRestTemplate
,测试该接口是否可用
-