天天看點

EDAS: Spring Boot 開發 Dubbo 應用

開發環境:InteliJ IDEA COMMUNITY

作業系統 :macOS Mojave

注冊中心:為了便于本地開發,本教程使用 EDAS 提供的輕量級配置中心,輕量級配置中心包含了 EDAS 服務注冊中心的基本功能。

1. 注冊中心安裝與配置

輕量級配置中心配置及使用請單獨參考: 輕量級配置中心

驗證配置中心是否可以正常使用:

打開浏覽器,在位址欄輸入 jmenv.tbsite.net:8080,回車,可看到輕量配置中心首頁。

EDAS: Spring Boot 開發 Dubbo 應用
EDAS: Spring Boot 開發 Dubbo 應用
EDAS: Spring Boot 開發 Dubbo 應用
EDAS: Spring Boot 開發 Dubbo 應用

2. 建立 dubbo-provider

【File】->【New】->【Project】->【maven】->【Next】-> 自定義輸入GroupId, ArtifactId
a. 主要依賴: Spring Boot 2.0.6.RELEASE(starter-web, actuator),dubbo-spring-boot-starter (0.2.0),edas-dubbo-extension (1.0.1)
<?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>

    <groupId>com.alibaba.edas.boot</groupId>
    <artifactId>dubbo-boot-provider</artifactId>
    <version>1.0-SNAPSHOT</version>

    <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>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.edas</groupId>
            <artifactId>edas-dubbo-extension</artifactId>
            <version>1.0.1</version>
        </dependency>
    </dependencies>

</project>           
b. 建立接口及方法
EDAS: Spring Boot 開發 Dubbo 應用
建立示例:IEatService,提供方法:eatFood()
package me.gary.edas.boot;

public interface IEatService {
    String eatFood(String str);
}           
c. 實作該接口方法
package me.gary.edas.boot;

import com.alibaba.dubbo.config.annotation.Service;

@Service
public class EatServiceImpl implements IEatService {
    public String eatFood(String name) {
        return "Please eat " + name + " (from Dubbo with Spring Boot)";
    }
}           

d. 配置 dubbo 服務

src/main/resources 路徑下建立 application.properties

dubbo.scan.basePackages: 接口服務實作類,@Service 注解所在的 package,若有多個,用逗号隔開

dubbo.registry.address: 前文提到的,本地已配置運作的輕量配置中心位址

# Base packages to scan Dubbo Components (e.g @Service , @Reference)
dubbo.scan.basePackages=me.gary.edas.boot
dubbo.application.name=dubbo-provider-springboot
dubbo.registry.address=edas://127.0.0.1:8080           
e. 開發 SpringBoot 入口類,并啟動
package me.gary.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);
    }
}
           
EDAS: Spring Boot 開發 Dubbo 應用
 spring boot 的 tomcat 啟動失敗!!"address already in use"。回憶一下, 輕量注冊中心是不是已經啟動了8080的web頁面啊

?是的。

f. 修改 spring boot 配置,指定端口為非8080端口,本示例使用8081。

最終,application.properties 配置如下:

# Base packages to scan Dubbo Components (e.g @Service , @Reference)
dubbo.scan.basePackages=me.gary.edas.boot
dubbo.application.name=dubbo-provider-springboot
dubbo.registry.address=edas://127.0.0.1:8080
server.port=8081           
“Tomcat started on port(s): 8081 (http) with context path ''”,消費者在指定8081端口成功運作。
EDAS: Spring Boot 開發 Dubbo 應用
打開“jmenv.tbsite.net:8080”,
EDAS: Spring Boot 開發 Dubbo 應用
可以看到服務提供者裡已經包含了com.alibaba.edas.boot.IEatService,且可以看到該服務的服務分組和提供者 IP。

3. 建立 dubbo-consumer

a. pom 依賴配置,同 provider

b. 建立接口及方法,同 provider

c. 此項目調用以 Controller 方式為例,建立 ConsumerController

package me.gary.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 ConsumerController {

    @Reference
    private IEatService eatService;

    @RequestMapping("/eatFood/{food}")
    public String eatFood(@PathVariable String food) {
        return eatService.eatFood(food);
    }
}
           
特别注意: 同樣,别忘記了 provider 中出現的問題。spring boot 預設在8080端口啟動 tomcat,此例 consumer 配置設定8082。
dubbo.application.name=dubbo-consumer-springboot
dubbo.registry.address=edas://127.0.0.1:8080
server.port=8082           
package me.gary.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);
    }
}           
EDAS: Spring Boot 開發 Dubbo 應用
EDAS: Spring Boot 開發 Dubbo 應用

通過配置中心頁面,可以看到服務調用者 com.alibaba.edas.boot.IEatService 已經注冊成功。

f. 通過 Consumer  暴露的 RESTful 接口,調用 provider 的 eatFood() 接口。

本例 Consumer 注冊端口為:8082,讀者需根據 application.properties 中指定的端口,修改以下指令。

curl http://localhost:8082/eatFood/apple           
EDAS: Spring Boot 開發 Dubbo 應用
Yay! RESTful 接口 --> consumer --> provider,該流程驗證通過。