SpringBoot整合Dubbo3.0基础配置

SpringBoot整合Dubbo3.0基础配置(dubbo-spring-boot-starter)

一、说明

众所周知,阿里早已把dubbo捐赠给了Apache,现在dubbo由Apache在维护更新,dubbo也已经成了Apache下的顶级项目。所以本demo项目所依赖的坐标是Apache官方最新的3.0.4坐标。

<dependency>
        <groupId>org.apache.dubbogroupId>
        <artifactId>dubbo-spring-boot-starterartifactId>
        <version>3.0.4version>
dependency>

下面的这些依赖 不是我们考虑的依赖

<dependency>
        <groupId>com.alibaba.spring.bootgroupId>
        <artifactId>dubbo-spring-boot-starterartifactId>
        <version>2.0.0version>
dependency>

<dependency>
        <groupId>io.dubbo.springbootgroupId>
        <artifactId>spring-boot-starter-dubboartifactId>
        <version>1.0.0version>
dependency>

SpringBoot是我们喜欢的项目配置框架,因为不用写xml,使用配置文件来约定我们的配置。本demo项目采用父子模块结构,解决了SpringBoot项目父子模块依赖的问题,可作为其他类似结构项目的参考。我们本着依赖最小化原则,不需要的依赖我们不引入。本demo项目dubbo配置属性只是基础配置,如需更多功能配置,请自行扩展。

本demo项目采用zookeeper为注册中心,默认你已经安装好zookeeper服务器,并已经启动。

二、父模块创建

父模块只是一个pom工程,用来管理依赖

选择Spring Initializr

SpringBoot整合Dubbo3.0基础配置_第1张图片

选择Maven POM

SpringBoot整合Dubbo3.0基础配置_第2张图片

这一步我们不勾选依赖

SpringBoot整合Dubbo3.0基础配置_第3张图片

这就是建好的父模块结构,只有pom.xml文件
SpringBoot整合Dubbo3.0基础配置_第4张图片

这种做的目的就是为了让spring-boot-starter-parent帮我们构建、管理、打包项目,还不会生成一些不需要的文件夹和文件,省去自己去做这些的麻烦,避免项目打包后运行出错。当然你也可以不使用标签,不依赖spring-boot-starter-parent,有些教程让依赖spring-boot-dependencies,这样你就要自己解决打包的问题。

下面我们删除不需要的依赖,建立我们自己的依赖管理


<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>
    <packaging>pompackaging>
    <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.3.1.RELEASEversion>
        <relativePath/> 
    parent>
    <groupId>com.examplegroupId>
    <artifactId>dubboartifactId>
    <version>0.0.1-SNAPSHOTversion>
    <name>dubboname>
    <description>Demo project for Spring Boot to Dubbodescription>
    <properties>
        <java.version>1.8java.version>
        <dubbo-boot.version>3.0.4dubbo-boot.version>
        <zkclient.version>4.2.0zkclient.version>
    properties>
    
    <dependencyManagement>
        <dependencies>
            
            <dependency>
                <groupId>org.apache.dubbogroupId>
                <artifactId>dubbo-spring-boot-starterartifactId>
                <version>${dubbo-boot.version}version>
            dependency>

            
            <dependency>
                <groupId>org.apache.curatorgroupId>
                <artifactId>curator-x-discoveryartifactId>
                <version>${zkclient.version}version>
            dependency>
        dependencies>
    dependencyManagement>
project>

三、创建interface模块

interface模块用来管理暴露的接口和实体类。在父模块下新建Module,直接选择maven方式创建

SpringBoot整合Dubbo3.0基础配置_第5张图片

pom.xml文件只需引入lombok依赖


<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">
    <parent>
        <artifactId>dubboartifactId>
        <groupId>com.examplegroupId>
        <version>0.0.1-SNAPSHOTversion>
    parent>
    <modelVersion>4.0.0modelVersion>

    <artifactId>dubbo-interfaceartifactId>

    <dependencies>
        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <scope>providedscope>
        dependency>
    dependencies>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-compiler-pluginartifactId>
                <version>3.1version>
                <configuration>
                    <source>${java.version}source>
                    <target>${java.version}target>
                    <encoding>${project.build.sourceEncoding}encoding>
                configuration>
            plugin>
        plugins>
    build>
project>

User.java

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User implements Serializable {

    private static final long serialVersionUID = 8728327146677888239L;

    private Integer userId;

    private String  userName;
}

UserService.java

public interface UserService {
    User getByUserId(Integer userId);
}

interface模块结构

SpringBoot整合Dubbo3.0基础配置_第6张图片

四、创建provider模块

和interface模块一样,采用maven方式,在父模块下新建module

pom.xml文件如下:


<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">
    <parent>
        <artifactId>dubboartifactId>
        <groupId>com.examplegroupId>
        <version>0.0.1-SNAPSHOTversion>
    parent>
    <modelVersion>4.0.0modelVersion>

    <artifactId>dubbo-providerartifactId>

    <dependencies>
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starterartifactId>
        dependency>

        <dependency>
            <groupId>org.apache.dubbogroupId>
            <artifactId>dubbo-spring-boot-starterartifactId>
        dependency>

        <dependency>
            <groupId>org.apache.curatorgroupId>
            <artifactId>curator-x-discoveryartifactId>
        dependency>

        <dependency>
            <groupId>com.examplegroupId>
            <artifactId>dubbo-interfaceartifactId>
            <version>0.0.1-SNAPSHOTversion>
        dependency>

        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>
    dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
            plugin>
        plugins>
    build>
project>

配置文件:

# 这里的配置属性只是基础配置,如需更多功能配置,请自行扩展
dubbo:
  application:
    name: dubbo-provider
  registry:
    address: zookeeper://127.0.0.1:2181
  protocol:
    name: dubbo
    port: 20880

UserServiceImpl

/**
 * 3.0x后dubbo @Service 为了和 spring的 @Service区分,改为了 @DubboService,相应的 @Reference
 * 也改为了 @DubboReference
 */
@DubboService
public class UserServiceImpl implements UserService {

    // 模拟数据
    private static final List<User> USERS = Arrays.asList(
            new User(1, "张三"),
            new User(2, "李四")
    );

    @Override
    public User getByUserId(Integer userId) {
        for (User user : USERS) {
            if (user.getUserId().equals(userId)) {
                return user;
            }
        }
        return null;
    }
}

为了provider工程能运行,我们需添加启动类 DubboProviderApplication.java

@EnableDubbo
@SpringBootApplication
public class DubboProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(DubboProviderApplication.class, args);
    }
}

provider模块结构

SpringBoot整合Dubbo3.0基础配置_第7张图片

五、创建consumer模块

consumer模块使用web工程对外提供访问,用来测试从provider获取数据,展示到web页面上。创建方式和上面的2个模块一样,采用maven方式,在父模块下新建module。

pom.xml文件


<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">
    <parent>
        <artifactId>dubboartifactId>
        <groupId>com.examplegroupId>
        <version>0.0.1-SNAPSHOTversion>
    parent>
    <modelVersion>4.0.0modelVersion>

    <artifactId>dubbo-consumerartifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>

        <dependency>
            <groupId>org.apache.dubbogroupId>
            <artifactId>dubbo-spring-boot-starterartifactId>
        dependency>

        <dependency>
            <groupId>org.apache.curatorgroupId>
            <artifactId>curator-x-discoveryartifactId>
        dependency>

        <dependency>
            <groupId>com.examplegroupId>
            <artifactId>dubbo-interfaceartifactId>
            <version>0.0.1-SNAPSHOTversion>
        dependency>

        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>
    dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
            plugin>
        plugins>
    build>
project>

配置文件:

dubbo:
  application:
    name: dubbo-consumer
  registry:
    address: zookeeper://127.0.0.1:2181
  protocol:
    name: dubbo
    port: 20880

# 由于zookeeper启动时要占用8080端口,我们要显示指定端口,要不然会端口冲突
server:
  port: 8081

UserController.java

@RestController
public class UserController {

    @DubboReference
    private UserService userService;

    @GetMapping("/user/{userId}")
    public ResponseEntity<User> getByUserId(@PathVariable("userId") Integer userId) {
        System.out.println("userId = " + userId);
        User user = userService.getByUserId(userId);
        System.out.println("user = " + user);
        return ResponseEntity.ok(userService.getByUserId(userId));
    }
}

DubboConsumerApplication.java

@SpringBootApplication
public class DubboConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(DubboConsumerApplication.class, args);
    }
}

consumer模块结构

SpringBoot整合Dubbo3.0基础配置_第8张图片

整个项目的结构

SpringBoot整合Dubbo3.0基础配置_第9张图片

六、测试效果

在浏览器看测试结果

SpringBoot整合Dubbo3.0基础配置_第10张图片

SpringBoot整合Dubbo3.0基础配置_第11张图片

七、打包测试

项目打包上线才是我们最终目的,所以我们需要测试打包后的效果

打包后的项目,只需要执行provider和consumer就可以了

SpringBoot整合Dubbo3.0基础配置_第12张图片
SpringBoot整合Dubbo3.0基础配置_第13张图片

关闭idea启动的工程,运行jar包

运行provider:

SpringBoot整合Dubbo3.0基础配置_第14张图片

运行consumer:

SpringBoot整合Dubbo3.0基础配置_第15张图片

浏览器查看效果:

SpringBoot整合Dubbo3.0基础配置_第16张图片
SpringBoot整合Dubbo3.0基础配置_第17张图片

SpringBoot整合Dubbo3.0基础配置_第18张图片
SpringBoot整合Dubbo3.0基础配置_第19张图片

完结。

你可能感兴趣的:(spring,boot,dubbo,zookeeper,java)