「 從0到1學習微服務SpringCloud 」04服務消費者Ribbon+RestTemplate

系列文章(更新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 -

一個立志成大腿而每天努力奮鬥的年輕人

伴學習伴成長,成長之路你並不孤單!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章