72 SpringCloud客戶端負載均衡器

1 本地負載均衡器基本概念

2,本地負載均衡器與nginx的區別

3,利用openfeign客戶端實現rpc調用

4,Ribbon實現客戶端負載均衡器源碼解讀

本地負載均衡器:
什麼是本地負載均衡器: 我們的消費者從我們的註冊中心上獲取接口調用地址列表,本地實現負載均衡算法(輪詢,隨機,hash一致,權重)等原理,獲取接口的列表,採用算法獲取選擇一個接口地址實現本地的rpc遠程調用。

本地負載均衡器有: 自己寫基於httpclient客戶端,ribbon SpringCloud 第一代中,
loadbalancerSpringCloud 自己研發。
如何選擇 ribbon 還是loadbalancer
SpringCloud Rest 或者Openfeign 都是默認支持ribbon

本地負載均衡器與nginx實現負載均衡器有哪些區別呢?

Nginx 屬於服務器負載均衡器,客戶端所有的請求都是統一交給我們的nginx,再由我們的nginx轉發到我們的真實服務實現負載均衡。
本地負載均衡器: 屬於客戶端負載均衡
Nginx實現負載均衡與本地實現負載均衡器應用場景。
Nginx 實現對我們的服務器實現負載均衡器 一般用於tomcat、jetty服務器。
本地負載均衡器屬於客戶端負載均衡器,一般用於微服務rpc遠程調用 比如dubbo,rest模板,openfeign 或者rpc遠程調用框架。
SpringCloud rest 或者openfeign 客戶端默認都是ribbon 實現調用。
@loadbalancer 實際上是我們的springcloud 自己寫的

loadBlancerClientSpringCloud 根據服務id 獲取id獲取負載均衡器rpc地址。
Openfeign 客戶端:
SpringCloud 第一代採用feign 第二代採用openfeign
openfeign 客戶端作用: 是一個web聲明式的http客戶端遠程調用工具。,底層是封裝HttpClient 技術。
Openfeign 屬於Springcloud自己研發,而feign是netflix 代碼寫法幾乎沒有任何變化。

真正的一個微服務架構 項目架構模式:

mayikt-meite-openfeign-parent---整個依賴父類
-----mayikt-service-api---開放的api接口 定義了接口沒有任何代碼業務實現。
--------mayikt-service-api-member---會員提供開放接口
--------mayikt-service-api-order---訂單提供開放接口

-----mayikt-service-impl---對我們開放的api接口代碼實現
--------mayikt-service-impl-member---會員提供開放接口
--------mayikt-service-impl-order---訂單提供開放接口

微服務構建基本的樣式,最大的優點是能夠對我們feign 實現複用機制。
注意feign客戶端調用的事項: 如果請求參數沒有加上註解的話,默認採用post請求發送
Openfeign 默認支持負載均衡, ribbon
nacos 服務註冊 服務名稱是否 有下劃線
在微服務架構中服務的名稱不能有下劃線。
Maven依賴

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.0.RELEASE</version>
</parent>


<dependencies>
    <!--  springboot 整合web組件-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        <version>0.2.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
        <version>2.0.0.RELEASE</version>
    </dependency>
</dependencies>

會員服務接口

public interface MemberService {

    /**
     * 提供會員接口
     *
     * @param userId
     * @return
     */
    @GetMapping("/getUser")
    String getUser(@RequestParam("userId") Long userId);
}


@RestController
public class MemberServiceImpl implements MemberService {
    @Value("${server.port}")
    private String serverPort;

    @Override
    public String getUser(Long userId) {
        return "我是會員服務端口號爲:" + serverPort;
    }
}

訂單服務

@RestController
public class OrderService {
    @Autowired
    private MemberServiceFeign memberServiceFeign;

    /**
     * 訂單調用會員
     *
     * @return
     */
    @GetMapping("/orderToMember")
    public String orderToMember() {
        String result = memberServiceFeign.getUser(10L);
        return "我是訂單服務,調用會員服務接口返回結果:" + result;
    }
}

@FeignClient(name = "meitemayikt-member")
public interface MemberServiceFeign extends MemberService {
//    /**
//     * 提供會員接口
//     *
//     * @param userId
//     * @return
//     */
//    @GetMapping("/getUser")
//    String getUser(@RequestParam("userId") Long userId);
}

微服務架構基本的樣式 最大的優點能夠對我們feign實現複用機制。

注意feign客戶端調用的事項:如果請求參數沒有加上註解的話,默認採用post請求發送。
Openfeign默認是支持負載均衡,ribbon。

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