Eureka就是一個管各個微服務之間調用的服務,之所以能夠實現負載均衡是因爲F版本里面集成了Ribbon
1、首先創建一個web項目然後集成Eureka Server,也是就服務註冊中心
- yml配置:
-
server: port: 8081 #服務註冊中心端口號 eureka: instance: hostname: 127.0.0.1 #服務註冊中心IP地址 client: registerWithEureka: false #是否向服務註冊中心註冊自己 fetchRegistry: false #是否檢索服務 serviceUrl: #服務註冊中心的配置內容,指定服務註冊中心的位置 defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
2、然後創建另一個項目,集成Eureka的client ,可以創建多個client以便互相調用對方的業務方法
- yml配置文件
-
eureka: client: serviceUrl: #註冊中心的註冊地址 defaultZone: http://127.0.0.1:8081/eureka/ server: port: 8082 #服務端口號 spring: application: name: service-provider #服務名稱--調用的時候根據名稱來調用該服務的方法
3、至於則麼區別就在於spring.application.name:服務名稱,當然名稱可以重複,名稱重複就會在你請求這個服務的時候他會輪詢。
調用業務方法使用的是restTemplete ,不過使用前需要配置一下,將他實例化
/**
* 實例化RestTemplate
* @return
*/
@LoadBalanced//負載均衡
@Bean
public RestTemplate rest() {
return new RestTemplate();
}
然後controller
/**
* @param id
* @return
*/
@GetMapping(value = "/findUser")
public User getUser(@RequestParam Integer id){
Map<String,Object> data = new HashMap<>();
//getForObject中的url http://+yml配置文件中的application的name(service-provider)然後加上對應的參數
data = restTemplate.getForObject("http://service-provider/getUser?id="+id,Map.class);
User user = new User();
user.setId(Long.valueOf(data.get("id").toString()));
user.setFrom(data.get("from").toString());
user.setUserName(data.get("userName").toString());
return user;
}
然後給你們看下我兩個service-provider中的getUser 的Controller
@GetMapping(value = "/getUser")
public Map<String, Object> getUser(@RequestParam Integer id) {
Map<String, Object> data = new HashMap<>();
data.put("id", id);
data.put("userName", "admin");
data.put("from", "provider-A");
return data;
}
@GetMapping(value = "/getUser")
public Map<String, Object> getUser(@RequestParam Integer id) {
Map<String, Object> data = new HashMap<>();
data.put("id", id);
data.put("userName", "admin");
data.put("from", "provider-B");
return data;
}
然後反覆請求這個接口你會發現 from會輪迴切換如圖,也就實現了負載均衡: