SpringCloud系列(二)——Eureka简介

Eureka简介

Eureka是Spring Cloud Netflix的一个子模块,也是核心模块之一。用于云端服务发现,一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移。
Eureka是一个基于REST(Representational State Transfer)的服务,主要用于AWS cloud, 提供服务定位(locating services)、负载均衡(load balancing)、故障转移(failover of middle-tier servers)。我们把它叫做Eureka Server. Eureka也提供了基于Java的客户端组件,Eureka Client,内置的负载均衡器可以实现基本的round-robin负载均衡能力。在Netflix,一个基于Eureka的更复杂的负载均衡器针对多种因素(如流量、资源利用率、错误状态等)提供加权负载均衡,以实现高可用(superior resiliency).

Eureka服务发现和注册

Server端:
创建一个基础的Spring Boot工程,并在pom.xml中引入需要的依赖内容

<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </dependency>
    </dependencies>

创建一个启动类Application
通过@EnableEurekaServer注解启动一个服务注册中心提供给其他应用进行对话。

@SpringBootApplication
@EnableEurekaServer
public class ServerApp {
    public static void main(String[] args) {
        new SpringApplicationBuilder(ServerApp.class).web(true).run(args);
    }
}

创建一个配置文件 application.yml,注意不要出现空格,否启动报错

server:
  port: 8761
eureka:
  client:
    register-with-eureka: false
    fetch-registry: false

执行main方法,查看注册中心。
这里写图片描述

provider端:
pom文件跟Server端一样,修改一下配置文件 application.yml,服务注册到Server端。

spring:
  application:
    name: first-police
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

编写EnableEurekaClient代码,@EnableEurekaClient注解。

@SpringBootApplication
@EnableEurekaClient
public class PoliceServer {

      public static void main(String[] args) {
            new SpringApplicationBuilder(PoliceServer.class).web(true).run(args);
        }

}

编写提供服务代码:

@RestController
public class PoliceController {

    @RequestMapping(value = "/call/{id}", method = RequestMethod.GET, 
            produces = MediaType.APPLICATION_JSON_VALUE)
    public Police call(@PathVariable Integer id){
        Police p = new Police();
        p.setId(id);
        p.setName("angus");
        return p;
    }
}

invoker端
pom文件和Server端一样,修改一下配置文件 application.yml,服务注册到Server端。

server:
  port: 8081
spring:
  application:
    name: first-person
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

编写EnableEurekaClient代码,@EnableEurekaClient注解。

@SpringBootApplication
@EnableEurekaClient
public class PersonServer {

    public static void main(String[] args) {
        new SpringApplicationBuilder(PersonServer.class).web(true).run(args);
    }

}

调用provider端的服务:

@Controller
@Configuration
public class TestController {

    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }

    @GetMapping("/router")
    @ResponseBody
    public String router() {
        RestTemplate tpl = getRestTemplate();
        String json = tpl.getForObject("http://first-police/call/1", String.class);
        return json;
    }

}

provider和invoker注册到Eureka Server:

这里写图片描述

invoker调用provider的服务:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_26641781/article/details/79928718