這是我參與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);
}
}
複製代碼