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的服务: