Eureka : 翻译翻译,找到了!(惊讶语气)
Spring CLoud 中的 Spring Cloud Eureka,用于 分布式项目中的服务治理。是对Netflix 套件中的Eureka 的二次封装。
Spring Cloud Eureka:注册服务,发现服务,治理服务,配置服务。
下面我将展开我对Eureka 的学习过程,
源码我放在了码云,这里大概是3个项目
eureka_server 负责 注册服务
eureka_client 负责暴露接口
eureka_consumer 负责 负载均衡 对 Eureka Client 接口的调用,RestTemplate和LoadBalanceClient 来完成负载
来讲一讲 基本用法,这也是这篇随笔的目的,这篇文章的篇幅不会太长,原文请结合大神的文章,前三篇
根据 中的Eureka的入门Demo
关系即: Eureka Server 负责注册 Eureka Client 、Eureka Consumer等 DiscoverClient,
Eureka Client 有若干台,而外部调用Eureka Client 的接口,
由唯一入口Eureka Consumer来提供负载均衡,去调用 其中的一台Eureka Client中的接口
你觉得,有必要,可以看看源码,里面备注很详细的,下面贴一点
eureka_server
1 /** 2 * @EnableEurekaServer 注解启动一个 服务的注册中心, 3 * 默认情况下,注册服务中心 会把自己作为客户端 来 尝试注册自己,需要在application.properties中禁用 4 * eureka.client.register-with-eureka=false 5 * eureka.client.fetch-registry=false 6 */ 7 @EnableEurekaServer 8 @SpringBootApplication 9 public class EurekaServerApplication { 10 //.. 11 12 }
配置文件:
1 spring.application.name= eureka-server 2 server.port=1001 3 4 eureka.instance.hostname=localhost 5 eureka.client.register-with-eureka=false 6 eureka.client.fetch-registry=false
eureka_client
/** * @EnableDiscoveryClient 激活Eureka 中DiscoveryClient实现,这样才能 * 在Controller中 输出服务 */ @EnableDiscoveryClient @SpringBootApplication public class EurekaClientApplication { public static void main(String[] args) { SpringApplication.run(EurekaClientApplication.class, args); } } /** * @RestController 等同于 @Controller && @ResponseBody */ @RestController public class HelloDiscoveryClient { @Autowired DiscoveryClient discoveryClient; @GetMapping("/hi") public String sayHello(){ String services = "Applications: " + discoveryClient.getServices(); System.out.println(services); return services; } }
配置文件
spring.application.name=euraka-client
server.port=2001
eureka.client.service-url.defaultZone=http://localhost:1001/eureka/
eureka_consumer
@EnableDiscoveryClient @SpringBootApplication public class EurekaConsumerApplication { @Bean public RestTemplate restTemplate(){ return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(EurekaConsumerApplication.class, args); } } @RestController public class HelloConsumerController { /** * 注入 LoadBalancerClient ,它是Spring cloud 提供的 负载均衡 客户端 */ @Autowired LoadBalancerClient loadBalancerClient; @Autowired RestTemplate restTemplate; /** * @GetMapping("/consumer") * @RequestMapping(value = "/consumer",method = RequestMethod.GET) * 这2种写法 是一个意思 * * @return */ @GetMapping("/consumer") //@RequestMapping(value = "/consumer",method = RequestMethod.GET) public String hi(){ //获得服务的事例,通过loadBalancerClient的choose函数来负载均衡的选出一个eureka-client的服务实例 ServiceInstance serviceInstance = loadBalancerClient.choose("euraka-client"); String url = "http://" + serviceInstance.getHost() + ":" + serviceInstance.getPort() + "/hi"; System.out.println(url); //这个服务实例的基本信息存储在ServiceInstance中,然后通过这些对象中的信息拼接出访问/dc接口的详细地址,最后再利用RestTemplate对象实现对服务提供者接口的调用 return restTemplate.getForObject(url,String.class); } }
配置文件
1 spring.application.name=eureka-consumer 2 server.port=2101 3 4 eureka.client.service-url.defaultZone=http://localhost:1001/eureka/
最后希望,对您有帮助!
其中遇到的坑:
eureka.client.service-url.defaultZone=http://localhost:1001/eureka/
这个配置文件 教程给出的是
eureka.client.serviceUrl.defaultZone=http://localhost:1001/eureka/
最为小白基本懵逼了,还好,自己摸索出来