全部產品
Search
文件中心

Enterprise Distributed Application Service:使用Spring Boot開發Dubbo微服務應用

更新時間:Jun 30, 2024

Spring Boot簡化了微服務應用的配置和部署,您可以自行選擇註冊中心和組態管理。本文介紹如何使用Spring Boot註解的方式基於Nacos開發一個Dubbo微服務樣本應用。如果您已有Spring Boot開發的Dubbo應用,可以跳過本文內容,直接部署到EDAS。

前提條件

在使用Spring Boot開發Dubbo微服務應用前,請先完成以下工作:

  • 下載Maven並設定環境變數。

  • 下載最新版本的Nacos Server

  • 啟動Nacos Server。

    1. 解壓下載的Nacos Server壓縮包

    2. 進入nacos/bin目錄,啟動Nacos Server。

      • Linux/Unix/Mac系統:執行命令sh startup.sh -m standalone

      • Windows系統:修改startup.cmd,配置參數set MODE="standalone",然後執行。

樣本工程

您可以按照本文的逐步搭建工程,也可以選擇直接下載本文對應的樣本工程,或者使用Git來clone:git clone https://github.com/aliyun/alibabacloud-microservice-demo.git

該專案包含了眾多的樣本工程,本文對應的樣本工程位於alibabacloud-microservice-demo/microservice-doc-demo/dubbo-samples-spring-boot

建立服務提供者

  1. 建立命名為spring-boot-dubbo-provider的Maven工程。

  2. pom.xml檔案中添加所需的依賴。

    這裡以Spring Boot 2.0.6.RELEASE為例。

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.0.6.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.3</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>1.1.1</version>
        </dependency>
    </dependencies>                   
  3. 開發Dubbo服務提供者。

    Dubbo中服務都是以介面的形式提供的。

    1. src/main/java路徑下建立一個packagecom.alibaba.edas.boot

    2. com.alibaba.edas.boot下建立一個介面(interface)IHelloService,裡麵包含一個SayHello方法。

      package com.alibaba.edas.boot;
      public interface IHelloService {
      String sayHello(String str);
      }                                
    3. com.alibaba.edas.boot下建立一個類IHelloServiceImpl,實現此介面。

      package com.alibaba.edas.boot;
      import com.alibaba.dubbo.config.annotation.Service;
      @Service
      public class IHelloServiceImpl implements IHelloService {
      public String sayHello(String name) {
        return "Hello, " + name + " (from Dubbo with Spring Boot)";
       }
      }                                
      說明

      這裡的Service註解是Dubbo提供的一個註解類,類的全名稱為:com.alibaba.dubbo.config.annotation.Service

  4. 配置Dubbo服務。

    1. src/main/resources路徑下建立application.propertiesapplication.yaml檔案並開啟。

    2. application.propertiesapplication.yaml中添加如下配置。

      # Base packages to scan Dubbo Components (e.g @Service , @Reference)
      dubbo.scan.basePackages=com.alibaba.edas.boot
      dubbo.application.name=dubbo-provider-demo
      dubbo.registry.address=nacos://127.0.0.1:8848                                
      說明
      • 以上三個配置沒有預設值,必須要給出具體的配置。

      • dubbo.scan.basePackages的值是開發的代碼中含有com.alibaba.dubbo.config.annotation.Servicecom.alibaba.dubbo.config.annotation.Reference註解所在的包。多個包之間用逗號隔開。

      • dubbo.registry.address的值首碼必須以nacos://開頭,後面的IP地址和連接埠指的是Nacos Server的地址。程式碼範例中為本地地址,如果您使用EDAS託管的註冊中心,無需額外調整,EDAS在運行時會自動調整為正確的註冊中心地址。如果您使用自建的Nacos註冊中心,需將dubbo.registry.address的參數值修改為正確的Nacos地址。

  5. 開發並啟動Spring Boot入口類DubboProvider

        package com.alibaba.edas.boot;
    
        import org.springframework.boot.SpringApplication;
        import org.springframework.boot.autoconfigure.SpringBootApplication;
    
        @SpringBootApplication
        public class DubboProvider {
    
            public static void main(String[] args) {
                SpringApplication.run(DubboProvider.class, args);
            }
    
        }                        
  6. 登入Nacos控制台http://127.0.0.1:8848,在左側導覽列中單擊服務列表,查看提供者列表。

    可以看到服務提供者裡已經包含了com.alibaba.edas.boot.IHelloService,且可以查詢該服務的服務分組和提供者IP。

建立服務消費者

  1. 建立一個Maven工程,命名為spring-boot-dubbo-consumer

  2. pom.xml檔案中添加相關依賴。

    這裡以Spring Boot 2.0.6.RELEASE為例。

        <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.0.6.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.3</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>1.1.1</version>
        </dependency>
    
    </dependencies>                        

    如果您需要選擇使用Spring Boot 1.x的版本,請使用Spring Boot 1.5.x版本,對應的com.alibaba.boot:dubbo-spring-boot-starter版本為0.1.0。

    說明

    Spring Boot 1.x版本的生命週期已於2019年08月結束,推薦使用新版本開發您的應用。

  3. 開發Dubbo消費者。

    1. src/main/java路徑下建立packagecom.alibaba.edas.boot

    2. com.alibaba.edas.boot下建立一個介面(interface)IHelloService,裡麵包含一個SayHello方法。

      package com.alibaba.edas.boot;
      
      public interface IHelloService {
       String sayHello(String str);
      }                                
  4. 開發Dubbo服務調用。

    例如需要在Controller中調用一次遠程Dubbo服務,開發的代碼如下所示。

    package com.alibaba.edas.boot;
    
    import com.alibaba.dubbo.config.annotation.Reference;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
        public class DemoConsumerController {
    
            @Reference
            private IHelloService demoService;
    
            @RequestMapping("/sayHello/{name}")
            public String sayHello(@PathVariable String name) {
                return demoService.sayHello(name);
            }
        }                        
    說明

    這裡的Reference註解是com.alibaba.dubbo.config.annotation.Reference。

  5. application.properties/application.yaml設定檔中新增以下配置。

    dubbo.application.name=dubbo-consumer-demo
    dubbo.registry.address=nacos://127.0.0.1:8848                        
    說明
    • 以上兩個配置沒有預設值,必須給出具體的配置。

    • dubbo.registry.address的值首碼必須以nacos://開頭,後面的IP地址和連接埠為Nacos Server的地址。程式碼範例中為本地地址,如果您將Nacos Server部署在其它機器上,請修改為實際的IP地址。

  6. 開發並啟動Spring Boot入口類DubboConsumer

    package com.alibaba.edas.boot;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class DubboConsumer {
    
        public static void main(String[] args) {
            SpringApplication.run(DubboConsumer.class, args);
        }
    
    }                        
  7. 登入Nacos控制台http://127.0.0.1:8848,在左側導覽列中單擊服務列表,再在服務列表頁面查看調用者服務。

    可以看到包含了com.alibaba.edas.boot.IHelloService,且可以查看該服務的服務分組和調用者IP。

結果驗證

`curl http://localhost:8080/sayHello/EDAS`

`Hello, EDAS (from Dubbo with Spring Boot)`            

部署到EDAS

說明

EDAS整合的ACM即Nacos的正式商用版本。當您將應用部署到EDAS的時候,EDAS會自動替換您本地Nacos Server的地址和服務連接埠(127.0.0.1:8848),您無需修改。

您可以根據實際需求選擇部署的叢集類型(主要為ECS叢集或Container ServiceKubernetes叢集)和部署途徑(控制台或工具),請參見如下文檔:

如果您使用控制台部署,在部署前,需要在本地應用程式中完成以下操作:

  1. pom.xml檔案中添加以下打包外掛程式的配置。

    • Provider

      <build>
       <plugins>
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
                 <executions>
                     <execution>
                         <goals>
                             <goal>repackage</goal>
                         </goals>
                         <configuration>
                             <classifier>spring-boot</classifier>
                             <mainClass>com.alibaba.edas.boot.DubboProvider</mainClass>
                         </configuration>
                     </execution>
                 </executions>
             </plugin>
       </plugins>
      </build>                                
    • Consumer

      <build>
       <plugins>
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
                 <executions>
                     <execution>
                         <goals>
                             <goal>repackage</goal>
                         </goals>
                         <configuration>
                             <classifier>spring-boot</classifier>
                             <mainClass>com.alibaba.edas.boot.DubboConsumer</mainClass>
                         </configuration>
                     </execution>
                 </executions>
             </plugin>
       </plugins>
      </build>                                
  2. 執行mvn clean package將本地的程式打成JAR包。

更多資訊

如果您使用了edas-dubbo-extension,由於edas-dubbo-extension的方式不能使用EDAS提供的相關功能,如Dubbo服務治理,所以不推薦使用,建議您遷移到Nacos。