系列文章(更新ing):
「 從0到1學習微服務SpringCloud 」01 一起來學呀! 「 從0到1學習微服務SpringCloud 」02 Eureka服務註冊與發現
「 從0到1學習微服務SpringCloud 」03 Eureka的自我保護機制
講完了服務的註冊和發現。在微服務架構中,業務都會被拆分成一個獨立的服務,服務與服務的通訊是基於http restful的。Spring cloud有兩種服務調用方式,一種是Ribbon+RestTemplate,另一種是feign。在這一篇文章首先講解下基於Ribbon+RestTemplate。
Ribbon
負載均衡:用於將工作負載分佈到多個服務器來提高網站、應用、數據庫或其他服務的性能和可靠性。
使用負載均衡帶來的好處很明顯:
1.當集羣裏的1臺或者多臺服務器down的時候,剩餘的沒有down的服務器可以保證服務的繼續使用
2.將訪問壓力分配到各個服務器,不會由於某一高峯時刻導致系統cpu急劇上升
負載均衡有好幾種實現策略,常見的有:隨機 (Random),輪詢 (RoundRobin),一致性哈希 (ConsistentHash),哈希 (Hash),加權(Weighted)
Ribbon的默認策略是輪詢
RestTemplate
傳統情況下在java代碼裏訪問restful服務,一般使用Apache的HttpClient。不過此種方法使用起來太過繁瑣。spring提供了一種簡單便捷的模板類來進行操作,這就是RestTemplate。
Spring RestTemplate, 使用java訪問URL更加優雅,更加方便。
例子:
String url = "http://localhost:8080/json";
JSONObject json = restTemplate.getForEntity(url, JSONObject.class).getBody();
Ribbon+RestTemplate的使用
ps:繼續之前的項目代碼,這裏不再重複粘貼,可查看之前文章內容。
Eureka Server
1.開啓Eureka Server應用
Eureka Client
service-hi(用於提供服務)
1.新建Eureka Client項目,名爲service-hi,用於提供服務,同樣註冊到註冊中心
//controller提供服務
@RestController
public class HiController {
@Value("${server.port}")
public String port;
@GetMapping("hi")
public String hi() {
return "hi!i am come from " + port;
}
}
2.複製應用,分別設置端口爲8862,8863,並開啓
3.打開註冊中心,service-hi的兩個服務已成功註冊進來
eureka-client(用於消費service-hi服務)
1.在啓動類注入restTemplate的Bean,並添加@LoadBalanced註解啓動負載均衡
@Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
2.在這個應用中調用service-hi的服務
@RestController
public class HiController {
@Autowired
private HiService hiService;
@GetMapping("hi")
public String hi() {
return hiService.hi();
}
}
@Service
public class HiService {
@Autowired
private RestTemplate restTemplate;
public String hi() {
//這裏使用服務名進行調用
return restTemplate.getForObject("http://SERVICE-HI/hi",String.class);
}
}
3.啓動應用,並在瀏覽器中調用eureka-client的hi方法
瀏覽器交替顯示:
hi!i am come from 8862
hi!i am come from 8863
至此,已通過Ribbon+RestTemplate實現了微服務間的調用與負載均衡
如果覺得不錯,請給個「好看」
分享給你的朋友!
THANDKS
- End -
一個立志成大腿而每天努力奮鬥的年輕人
伴學習伴成長,成長之路你並不孤單!