这是我参与8月更文挑战的第9天,活动详情查看:8月更文挑战java
Eureka是基于REST(表明性状态转移)的服务,主要在AWS云中用于定位服务,以实现负载均衡和中间层服务器的故障转移。咱们称此服务为Eureka服务器。Eureka还带有一个基于Java的客户端组件Eureka Client,它使与服务的交互变得更加容易。客户端还具备一个内置的负载平衡器,能够执行基本的循环负载平衡。在Netflix,更复杂的负载均衡器将Eureka包装起来,以基于流量,资源使用,错误条件等多种因素提供加权负载均衡,以提供出色的弹性。git
官方的介绍在这里Eureka wiki。程序员
Eureka是Netflix开源的一个RESTful服务,主要用于服务的注册发现。( Netflix是一家美国公司)github
Eureka由两个组件组成:Eureka服务器和Eureka客户端。spring
Eureka服务器用做服务注册服务器。服务器
Eureka客户端是一个java客户端,用来简化与服务器的交互、做为轮询负载均衡器,并提供服务的故障切换支持。markdown
Netflix在其生产环境中使用的是另外的客户端,它提供基于流量、资源利用率以及出错状态的加权负载均衡。app
在我看来,Eureka的吸引力来源于如下几点:负载均衡
开源:你们能够对实现一探究竟,甚至修改源码。框架
可靠:通过Netflix多年的生产环境考验,使用应该比较靠谱省心
功能齐全:不但提供了完整的注册发现服务,还有Ribbon等能够配合使用的服务。
基于Java:对于Java程序员来讲,使用起来,内心比较有底。
spring cloud能够使用Spring Cloud, 与Eureka进行了很好的集成,使用起来很是方便。
总的来讲,Eureka
就是一个服务发现框架。
具体来讲就是:建立 2个model工程: 一个model工程做为服务注册中心,即Eureka Server,另外一个做为Eureka Client。
实现一个简单的 Eureka Demo 须要三个工程:
spring-cloud-starter-netflix-eureka-server的依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
复制代码
server:
port: 8888
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
复制代码
@SpringBootApplication
@EnableEurekaServer
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
System.out.println("注册中心启动成功");
}
}
复制代码
server:
port: 8888
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
复制代码
@SpringBootApplication
@EnableEurekaServer
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
System.out.println("注册中心启动成功");
}
}
复制代码
@RestController
public class ProviderController {
@RequestMapping("/getUserList")
public List<String> getUserList() {
List<String> listUser = new ArrayList<String>();
listUser.add("zhangsan");
listUser.add("lisi");
listUser.add("yushengjun");
return listUser;
}
}
复制代码
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8888/eureka/
server:
port: 8764
spring:
application:
name: consumer
复制代码
@EnableEurekaClient
@SpringBootApplication
public class AppOrder {
public static void main(String[] args) {
SpringApplication.run(AppOrder.class, args);
System.out.println("消费者启动成功");
}
@Bean
@LoadBalanced // 开启ribbon,提供负载均衡
RestTemplate restTemplate() {
return new RestTemplate();
}
}
复制代码
@Controller
public class ConsumerController {
@Autowired
RestTemplate restTemplate;
@GetMapping("/getdata")
@ResponseBody
List<String> getAllpoints(){
return restTemplate.getForObject("http://provider/getUserList", List.class);
}
}
复制代码