亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Dubbo?Service?Mesh基礎架構組件源碼分析

發布時間:2023-03-02 10:58:47 來源:億速云 閱讀:159 作者:iii 欄目:開發技術

這篇文章主要講解了“Dubbo Service Mesh基礎架構組件源碼分析”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Dubbo Service Mesh基礎架構組件源碼分析”吧!

其他基礎架構

除了Alibaba Dubbo,公司使用Zookeeper作為配置中心,分布式消息隊列rocketmq,分布式緩存redis,阿里云分庫分表產品DRDS,阿里云關系型數據庫RDS,這些基礎組件在整個Service Mesh架構的改造中是不變的。

Dubbo項目Service Mesh改造具體實現 基礎技術方案

Dubbo架構改造成Service Mesh架構就要Dubbo框架從項目中移除,我們這里將Dubbo框架移除,并且將服務端接口全部改造成rest接口,這就需要服務端使用新的容器發布rest接口,所以干脆就將項目改造成Sping Boot Web應用,協議問題沒有了,但是如何盡可能改動小的能夠讓消費端快速的接入Sping Boot Web應用的服務端就成為了難點,由于Dubbo項目API模塊的作用與Spring Cloud Feign模塊的作用十分相似,模塊內都是一些interface,需要服務端定義xxxServiceImpl去實現各個interface,然后消費者通過Spring依賴注入將interface注入并使用,這就使得Dubbo最復雜的服務間調用方式有了解決的方案。

基礎組件改造

  • 根pom.xml引入SpringBoot parent,增加 spring-cloud-dependencies import引用

  • 刪除所有dubbo相關引用。

這一步驟簡單來說就是將pom.xml中Dubbo的所有jar依賴全部刪除,并且引入SpringBoot parent和 spring-cloud-dependencies的引用,例如:

改造前:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.8.4</version>
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-log4j12</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>log4j</artifactId>
                    <groupId>log4j</groupId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.curator</groupId>
                    <artifactId>curator-client</artifactId>
                </exclusion>
                <exclusion>
                    <artifactId>curator-framework</artifactId>
                    <groupId>org.apache.curator</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
            <exclusions>
                <exclusion>
                    <artifactId>zookeeper</artifactId>
                    <groupId>org.apache.zookeeper</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.6</version>
            <!-- 移除log4j的打印框架,否則,log 4j日志不生效 -->
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-log4j12</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>log4j</artifactId>
                    <groupId>log4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
</project>

改造后:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.2.3.RELEASE</version>
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-api</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>feign-hystrix</artifactId>
                    <groupId>io.github.openfeign</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
                    <groupId>org.springframework.cloud</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>spring-cloud-starter-netflix-archaius</artifactId>
                    <groupId>org.springframework.cloud</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>spring-cloud-netflix-ribbon</artifactId>
                    <groupId>org.springframework.cloud</groupId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
</project>

Dubbo門面API改造

  1. pom.xml增加spring-cloud-starter-openfeign引用。

  2. 刪除所有Dubbo相關引用Dubbo相關配置文件。

  3. Dubbo原有API接口是標準的JAVA接口定義,與Feign Restful接口定義十分類似。這里可以在原有的API接口基礎上增加 @FeignClient@RequestMapping等注解,將一個普通的API接口改造成一個Feign Restful接口,后續會使用Feign這個 Restful框架來處理服務間調用等問題。由于Feign本身是自帶了Ribbon負載均衡,服務訪問者經過負載均衡后會找到服務提供者的一個 IP+Port進行調用,這與K8S Service要求的服務名調用的方式相沖突,所以必須想辦法去掉Feign自帶的負載均衡。好在 @FeignClient可以手工指定一個固定的調用地址,這里可以把這個地址設置成K8S Servicename名稱,從而實現了通過FeignK8S Service服務名調用的能力。此部分需要每個API接口增加注解一次,改造工作量相對可控。

  4. 由于Feign要求接口使用Restful格式,所以接口中的每個抽象方法都必須添加@RequestMapping,@GetMapping,@PostMapping等注解暴露成一個Restful資源地址。此部分改造涉及到每個API接口的每個抽象方法,是整個方案里改動量最大的一部分。

  5. 此部分整體改造工作量取決于原有的Dubbo項目包含多少個API接口,以及每個API包含多少個抽象方法。

改造前示例:

public interface IOdaApi {
    ModelsReturn<ModelsCommonResponse<ConsumptionODAResponse>> consumptionODA(ConsumptionODARequest consumptionODARequest);
    ModelsReturn<ModelsCommonResponse<RefundODAResponse>> refundODA(RefundODARequest refundODARequest);
    ModelsReturn<ModelsCommonResponse<ConsumptionODAResponse>> consumptionQueryODA( ConsumptionQueryODARequest consumptionQueryODARequest);
    ModelsReturn<ModelsCommonResponse<String>> repayODA(RepayODARequest repayODARequest);
}

改造后示例:

@FeignClient(name = "miss-xxx-svc", url = "http://miss-xxx-svc:8080")
public interface IOdaApi {
    @PostMapping(value = "/xxxService/consumptionODA")
    ModelsReturn<ModelsCommonResponse<ConsumptionODAResponse>> consumptionODA(@RequestBody ConsumptionODARequest consumptionODARequest);
}

Dubbo Provider端改造

  1. pom.xml增加spring-boot-starter-webspring-cloud-starter-openfeign等引用,同時增加SpringBoot mainClass 標準啟動項配置。刪除所有Dubbo相關引用、Dubbo相關配置文件。

  2. 增加SpringBoot啟動類,增加@SpringBootApplication@EnableFeignClients兩個注解,配置dubbo provider服務端口號。

  3. xxxServiceImpl服務實現類上增加@RestController注解,提供 consumer Restful 訪問的能力。 這個需要每個服務實現類都加上@RestController注解,不要遺漏。

  4. 此部分大都屬于一次性改動,改造工作量相對可控。

改造后示例:

pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        ...
    </parent>
    <artifactId>MISS.xxxService</artifactId>
    <dependencies>
        <dependency>
            <groupId>com.xxx.xxx</groupId>
            <artifactId>MISS.xxxService.API</artifactId>
            <version>2.0.5-RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
    </dependencies>
    <build>
        ...
    </build>
</project>

改造后的 OdaImpl.java 代碼示例(改造前只是缺少 @RestController 注解,其他代碼完全一致):

@Slf4j
@RestController
public class OdaImpl implements IOdaApi {
    @Resource
    private OdaService odaService;
    @Override
    public ModelsReturn<ModelsCommonResponse<ConsumptionODAResponse>> consumptionODA(ConsumptionODARequest consumptionODARequest) {
        try {
            Validation.validate(consumptionODARequest);
            ...
            return ErrorCode.returnMsg(ErrorCode.OPSERATE_SUCCESS, odaService.consumptionODA(consumptionODARequest.getMultiIndustryInfo(),consumptionODA));

        } catch (Exception e) {
            log.error(LogUtil.exceptionMarker(), "ODA交易異常",e);
            return ErrorCode.returnMsgByErrorMessage(ErrorCode.PARA_ERROR, "ODA交易異常");
        }
    }
}

Dubbo Comsumer端改造

  • pom.xml增加spring-boot-starter-webspring-cloud-starter-openfeign等引用,同時增加SpringBoot mainClass 標準啟動項配置。

  • 刪除所有Dubbo相關引用、Dubbo相關配置文件。

  • 增加SpringBoot啟動類,增加@SpringBootApplication@EnableFeignClients(需要配置 basePackages 掃描包路徑) 兩個注解,并配置dubbo consumer服務端口號。

  • 此部分大都屬于一次性改動,改造工作量相對可控。

由于dubbo consumer項目改造與dubbo provider改造極其相似,這里不再貼出代碼示例。

感謝各位的閱讀,以上就是“Dubbo Service Mesh基礎架構組件源碼分析”的內容了,經過本文的學習后,相信大家對Dubbo Service Mesh基礎架構組件源碼分析這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

上饶县| 丹凤县| 黄浦区| 棋牌| 谷城县| 方正县| 昌黎县| 明水县| 白山市| 昌邑市| 周宁县| 塘沽区| 莫力| 武功县| 宜兴市| 曲麻莱县| 拜泉县| 北安市| 十堰市| 邵阳县| 华宁县| 庆元县| 博客| 襄汾县| 内丘县| 德格县| 米脂县| 江城| 普洱| 专栏| 吉木乃县| 阜新| 灵台县| 长武县| 大渡口区| 泸溪县| 都昌县| 石狮市| 上饶县| 新乐市| 乐山市|