日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

如何將應用從HSF遷移到Dubbo3

本文介紹在EDAS上如何將應用從HSF遷移到Dubbo3。參考本文檔,您可以在EDAS中將使用HSF構建的微服務系統逐步遷移至Dubbo3架構。遷移期間,您的服務無需整體停機。

背景信息

Dubbo3是流行的開源Java微服務框架,具備更豐富的服務治理能力和更好的社區支持。EDAS同時支持HSF和Dubbo3應用,并建議HSF用戶遷移至Dubbo3。

名詞解釋

  • HSF2應用:使用HSF注解或XML方式聲明服務提供者或服務消費者,并使用EDAS容器3.x部署的應用。

  • HSF3應用:使用HSF注解或XML方式聲明服務提供者或消費者,并使用EDAS容器5.x及以上版本部署的應用(EDAS容器4.x也是HSF3,但不支持雙注冊、雙發現)。

  • Dubbo3應用:使用Dubbo方式聲明服務提供者或消費者,只依賴于開源的Dubbo3。

  • Config Server:EDAS中HSF應用使用的注冊中心。

使用說明

HSF3(EDAS容器5.x)同時使用Config Server、Nacos作為服務注冊中心,支持服務同時被注冊到Config Server和Nacos。此外,HSF3提供HSF協議和Dubbo協議的服務端口。HSF2應用無需改造,直接使用HSF3容器部署后,應用便可實現同時與HSF2、Dubbo3應用的互相通訊,實現平滑遷移。

原理

遷移流程圖

如圖所示,整體遷移過程歷經三個階段。

  1. 原始狀態:全部為HSF2應用,服務注冊中心使用Config Server。

  2. 遷移狀態:應用處于混合部署階段,分為如下子過程:

    1. HSF2應用+HSF3應用:使用HSF3部署部分應用,此時,HSF2、HSF3應用同時使用Config Server作為注冊中心,可互相發現,互相調用服務。具體操作,請參見步驟一:升級應用運行環境

    2. 全量HSF3應用:使用HSF3重新部署所有應用后,此時,系統中已無HSF2應用。

    3. HSF3應用+Dubbo3應用:為HSF3應用開啟服務雙注冊、服務雙發現,同時使用Dubbo3方式聲明服務并部署應用實例。具體操作,請參見步驟二:創建應用。此時,HSF3、Dubbo3應用可互相發現、互相調用服務。

  3. 最終狀態:所有HSF應用遷移至Dubbo3。

遷移步驟

步驟一:升級應用運行環境

說明

該步驟無需修改應用程序代碼。

  • 對于在EDAS部署的ECS應用,通過運行時環境升降級功能,將Pandora版本升級到5.X。運行環境升降級

  • 對于在EDAS使用WAR、JAR包部署的K8s應用,可通過部署,將應用運行環境升級到EDAS-Container 5.X的版本。K8s環境升級

  • 對于在EDAS使用鏡像部署的K8s應用,可重新構建鏡像,將鏡像版本升級到5.0.0。在HSF應用的Dockerfile文件中增加如下配置,將HSF應用的運行環境EDAS-Container(Pandora)的版本升級為5.0.0。HSF應用的Dockerfile文件,請參見HSF應用的Dockerfile示例。

    # 在WORKDIR/home/admin后增加升級腳本如下
    # 設置EDAS-Container/Pandora應用容器版本
    ENV UPGRADED_CONTAINER_VERSION 5.0.0
    RUN /home/admin/bin/upgradecontainer.sh

修改應用啟動參數或修改應用配置,完成部署。具體操作,請參見HSF3應用配置服務雙注冊、雙發布

步驟二:創建應用

說明

該步驟需要修改應用程序代碼,請參見Dubbo3應用配置樣例,完成配置,并構建出部署包。

使用新的部署包,在EDAS中相同微服務空間下創建Java應用。

  • ECS應用:創建ECS應用

  • K8s應用:創建K8s應用

配置參考

HSF3應用配置服務雙注冊、雙發布

配置要求和方法

  1. 使用EDAS容器5.x部署。

  2. 啟動雙發布、雙發現。

    • 方法一:通過JVM參數-Ddubbo.config.hsf.exportNativeDubbo=true啟用雙發布,-Ddubbo.config.hsf.referNativeDubbo=true啟用雙發現。

    • 方法二:在dubbo.properties文件中,指定dubbo.config.hsf.exportNativeDubbo=true啟用雙發布,指定dubbo.config.hsf.referNativeDubbo=true啟用雙發現。

HSF3應用會默認發布、發現HSF服務。啟用上述配置后,應用將服務注冊到Nacos,并發布Dubbo服務,同時通過Nacos發現服務,調用Dubbo服務。啟用雙發布、雙發現后,HSF3應用可以使用Nacos作為注冊中心,使用Triple協議作為通訊協議,提供Dubbo服務。

雙發現的路由策略

  • 按照Provider數量均衡調用。例如,當有1個HSF服務節點,3個Dubbo節點(一個HSF3節點啟用雙發布后,同時作為HSF服務節點和Dubbo服務節點)時,HSF服務節點被調用的概率為1/4,Dubbo服務節點的調用概率為3/4。

  • 若任一種類型的節點不可用,則調用可用類型的節點。

  • 若兩種類型的節點都不可用,則默認調用HSF類型節點。

Dubbo3應用配置樣例

應用必須聲明對dubbo-registry-nacos、dubbo-rpc-triple的依賴,建議使用3.0.5~3.0.12之間版本。

<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-registry-nacos</artifactId>
    <version>${dubbo.version}</version>
</dependency>
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-rpc-triple</artifactId>
    <version>${dubbo.version}</version>
</dependency>

對于nacos-client版本依賴要求,僅能使用2.0.3或2.1.2及以上版本。2.0.4~2.1.1的版本存在不支持EDAS共享注冊中心或MSE注冊中心的問題。

<dependency>
    <groupId>com.alibaba.nacos</groupId>
    <artifactId>nacos-client</artifactId>
    <version>2.1.2</version>
</dependency>

Dubbo聲明配置要求

HSF3僅支持服務級服務發布、發現。所以需要Dubbo側設置強制使用服務發現模式,設置方法如下:

  • 方法一:聲明JVM參數:-Ddubbo.application.service-discovery.migration=FORCE_INTERFACE。

  • 方法二:在dubbo.properties中配置dubbo.application.service-discovery.migration=FORCE_INTERFACE

    spring boot yaml配置格式示例如下:

    重要

    特別注意,需要聲明使用Triple協議。

    dubbo:
      application:
          name: ....
        protocol:
          # 必須聲明該配置,因為HSF3使用Triple協議發布服務
        name: tri
        port: -1
      # 聲明使用Nacos注冊、配置中心(EDAS上部署后,將被自動替換)
      registry:
        id: nacos-registry
        address: nacos://127.0.0.1:8848
      config-center:
        address: nacos://127.0.0.1:8848
      metadata-report:
        address: nacos://127.0.0.1:8848

    xml配置格式示例如下:

    <dubbo:metadata-report address="nacos://127.0.0.1:8848"/>
    <dubbo:registry address="nacos://127.0.0.1:8848"/>
    <dubbo:config-center address="nacos://127.0.0.1:8848"/>
    <dubbo:protocol id="tri" name="tri" />

參考DEMO

下載Demo

說明

該Demo包含如下工程模塊:

流程圖

如上圖所示,提供了4組Demo工程,其中第一組Demo采用HSF2容器、HSF3容器部署。

服務提供者

服務消費者

itemcenter-hsf

HSF方式聲明服務的服務提供者。

detail-hsf

  • HSF方式聲明服務的服務消費者。

  • 使用HSF2容器部署。

  • 僅能調用到HSF服務。

itemcenter-hsf

  • HSF方式聲明服務的服務提供者(WAR包)。

  • 使用HSF3容器部署。

  • 能同時提供HSF、Dubbo服務。

detail-hsf

  • HSF方式聲明服務的服務消費者(WAR包)。

  • 使用HSF3容器部署。

  • 能同時調用到HSF、Dubbo服務。

itemcenter-hsf-pandora-boot

  • HSF方式聲明服務的服務提供者(JAR包)。

  • 使用HSF3容器部署。

  • 同時提供HSF、Dubbo服務。

detail-hsf-pandora-boot

  • HSF方式發布消費服務(JAR包)。

  • 使用HSF3容器部署。

  • 能同時調用到HSF、Dubbo服務。

itemcenter-dubbo

  • 原生Dubbo方式(WAR包)聲明服務的服務提供者。

  • 無需依賴EDAS容器,使用apache-tomcat部署即可。

  • 提供Dubbo服務。

detail-dubbo

  • 原生Dubbo方式(WAR包)聲明服務的服務消費者。

  • 無需依賴EDAS容器,使用apache-tomcat部署即可。

  • 調用Dubbo服務。

itemcenter-dubbo-spring-boot

  • 原生Dubbo方式(JAR包)聲明服務的服務提供者。

  • 無需依賴EDAS容器。

  • 提供Dubbo服務。

detail-dubbo-spring-boot

  • 原生Dubbo方式(JAR包)聲明服務的服務消費者。

  • 無需依賴EDAS容器。

  • 調用Dubbo服務。

可以根據自己的需要,選擇相應的Demo分組部署實驗。部署后,可進入任一Consumer執行如下命令。

curl 'http://127.0.0.1:8080/index.htm?name=abc'

返回信息如下:

# 第x次調用
Item Id: 1, Name: Protocol=HSF,LocalIP=172.17.48.116,Name=default,Date=2022-11-22 19:45:19:372,TraceId=ac11303616691175193702012d003f
# 第x+1次調用
Item Id: 1, Name: Protocol=TRI,LocalIP=172.17.48.116,Name=default,Date=2022-11-22 19:45:15:741,TraceId=ac11303616691175157392011d003f

返回說明:

  • Protocol:服務提供者使用的處理協議。其中,HSF表示HSF協議,TRI表示Triple協議。

  • LocalIP:服務提供者的IP地址。

FAQ

HSF3應用如何使用MSE Nacos實例作為Dubbo服務注冊中心

如果您繼續使用EDAS共享注冊中心,則無需執行以下操作。

  1. MSE管理控制臺創建實例,并添加命名空間。具體操作,請參見創建MSE實例創建命名空間 。

  2. 在應用Maven源碼的resources目錄下,添加dubbo.properties文件,在dubbo.properties文件中,添加以下內容,并構建應用包。

    dubbo.config.hsf.nativeDubbo.registry=nacos://mse-xxxx-nacos-ans.mse.aliyuncs.com:8848?namespace=msenamespace01
    • mse-xxxx-nacos-ans.mse.aliyuncs.com:實例的地址。

    • msenamespace01:創建的命名空間ID。

  3. 使用程序配置注冊中心。

    • 方法一:添加JVM啟動參數-Dnacos.use.endpoint.parsing.rule=false -Dnacos.use.cloud.namespace.parsing=false。

    • 方法二:如下圖,部署應用時,在應用高級設置頁面,展開微服務治理,勾選使用程序配置的注冊中心(即不使用EDAS提供Nacos的注冊中心)微服務治理

  4. 部署應用后進入MSE引擎實例,查看服務列表是否包含您的服務。

如何查看應用是否正常啟動?

  • 對于Spring-boot+K8s應用,一般查看K8s標準輸出。

  • 對于Tomcat或EDAS容器部署的應用,一般查看tomcat目錄/logs/localhost.log.xxx 文件。

如何查看服務是否注冊到Nacos?

執行grep REGISTER-SERVICE ~/logs/nacos/naming.log | grep 服務名 命令。若存在,如圖所示:

服務注冊到Nacos

查看服務是否通過Nacos正常發現?

執行命令find ~/nacos/naming -name "*服務名*" ,文件內容部分格式化后如下所示。

{
  "name": "providers:com.alibaba.edas.carshop.itemcenter.ItemService:1.0.0:HSF",
  "groupName": "DEFAULT_GROUP",
  "clusters": "",
  "cacheMillis": 10000,
  "hosts": [
    {
      "instanceId": "172.17.XX.XX#50051#null#DEFAULT_GROUP@@providers:com.alibaba.edas.carshop.itemcenter.ItemService:1.0.0:HSF",
      "ip": "172.17.XX.XX",
      "port": 50051,
      "weight": 1.0,
      "healthy": true,
      "enabled": true,
      "ephemeral": true,
      "clusterName": "DEFAULT",
      "serviceName": "DEFAULT_GROUP@@providers:com.alibaba.edas.carshop.itemcenter.ItemService:1.0.0:HSF",
      "metadata": {
        "release": "3.0.12",
        "methods": "getItemByName,getItemById,getItemByIdAndName",
        "deprecated": "false",
        "dubbo": "2.0.2",
        "pid": "1",
  • com.alibaba.edas.carshop.itemcenter.ItemService:服務名。

  • 1.0.0:版本號。

  • HSF:分組名。

  • hosts:服務提供者。

  • 172.17.XX.XX:服務提供者IP及服務端口。

服務名稱、版本號和分組名尤為關鍵,是服務的唯一標識。若其中一項與Provider注冊不一致,則Consumer無法找到服務。若不存在,執行cat ~/logs/nacos/naming.log | grep ItemService命令,查看日志是否觸發訂閱。