微服務:dubbo 從2.6 升級到2.7

dubbo 從2.6 升級到2.7

參考:https://www.cnblogs.com/cdfive2018/p/11245036.html
dubbo官網:http://dubbo.apache.org/zh-cn/docs/user/versions/version-270.html

  • 修改 dubbo 依賴,完成dubbo 升級

    <properties>
            <dubbo.version>2.7.4.1</dubbo.version>
    </properties>
    <dependencyManagement>
         <dependencies>
                <!--SpringBoot-->
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-dependencies</artifactId>
                    <version>2.1.9.RELEASE</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
                <dependency>
                    <groupId>org.apache.dubbo</groupId>
                    <artifactId>dubbo-dependencies-bom</artifactId>
                    <version>${dubbo.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
                <!-- dubbo 依賴 -->
                <dependency>
                    <groupId>org.apache.dubbo</groupId>
                    <artifactId>dubbo-spring-boot-starter</artifactId>
                    <version>${dubbo.version}</version>
                </dependency>
                <!-- nacos 依賴 -->
                <dependency>
                    <groupId>org.apache.dubbo</groupId>
                    <artifactId>dubbo-registry-nacos</artifactId>
                    <version>${dubbo.version}</version>
                </dependency>
                <dependency>
                    <groupId>com.alibaba.boot</groupId>
                    <artifactId>nacos-config-spring-boot-starter</artifactId>
                    <version>0.2.3</version>
                </dependency>
         </dependencies>
    </dependencyManagement>
    
  • 如果不修改任何代碼,也可以編譯通過,只是會提示:com.alibaba.dubbo.config.annotation.* 已棄用。

  • 但是要想跑起來,還需要做如下修改:

    • 1.包名修改,將 com.alibaba.dubbo 改成 org.apache.dubbo, 會涉及到3個地方

      // 如果不修改Reference ,則無法 create bean
      import com.alibaba.dubbo.config.annotation.Reference;
      import org.apache.dubbo.config.annotation.Reference;
      
      import com.alibaba.dubbo.config.annotation.Service;
      import org.apache.dubbo.config.annotation.Service;
      
      import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
      import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
      
    • 2.解決循環引用的問題: ‘AServiceImpl’ has been injected into other beans [bServiceImpl] in its raw version as part of a **circular reference **

      • 在 AServiceImpl 前添加 @Lazy 註解 ,即可解決循環引用的問題
    • 3.解決 Failed to create adaptive(適應的) instance 的問題,此問題由raincat 引起

      // 錯誤內容如下:
      An attempt was made to call a method that does not exist
      ...
      The method's class, com.alibaba.dubbo.common.logger.LoggerAdapter, is available from the following locations:
          jar:file:/Users/howard/.m2/repository/org/apache/dubbo/dubbo/2.7.4.1/dubbo-2.7.4.1.jar!/com/alibaba/dubbo/common/logger/LoggerAdapter.class
          jar:file:/Users/howard/.m2/repository/com/alibaba/dubbo/2.5.3/dubbo-2.5.3.jar!/com/alibaba/dubbo/common/logger/LoggerAdapter.class
      
      It was loaded from the following location:
          file:/Users/howard/.m2/repository/org/apache/dubbo/dubbo/2.7.4.1/dubbo-2.7.4.1.jar
      
      Action:
      Correct the classpath of your application so that it contains a single, compatible version of com.alibaba.dubbo.common.logger.LoggerAdapter
      
      Exception in thread "DubboShutdownHook" java.lang.IllegalStateException: Failed to create adaptive instance: java.lang.IllegalStateException: Can't create adaptive extension interface org.apache.dubbo.common.extension.ExtensionFactory, cause: Extension instance ...
      
      // 從以上錯誤內容可以看出存在兩個版本的dubbo , 分別是2.5.3 和 2.7.4.1 ,其中 2.5.3 是由raincat 2.0.0 引入的。嘗試升級raincat 版本到 2.0.1,就解決了兩個dubbo版本的問題。注意:需要將raincat的註解的命名空間修改正確即可。
      import org.dromara.raincat.core.annotation.TxTransaction; 
      import org.dromara.raincat.annotation.TxTransaction;
      
  • 4.解決 raincat init error 問題,raincat init exception:tx transaction ex:{}:Please check your configuration

    • 從github上的raincat 文檔,查到raincat 還不支持 dubbo 2.7版本,
    • 解決辦法只能是:棄用raincat,使用其他的分佈式事務代替raincat 。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章