【Spring Cloud 系列】 二、Spring Cloud Eureka 的第一印象

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/

最为小白基本懵逼了,还好,自己摸索出来




 

 

 

 

posted @ 2017-08-31 15:48  谢幕ゾ华丽  阅读(406)  评论(0编辑  收藏  举报