04.Dubbo快速体验(二)

72 阅读3分钟

Dubbo快速体验(二)

1.介绍

通过SpringBoot与简单整合Dubbo,来快速实现一个Dubbo的小应用,来简单体验一下

2.环境准备

  • SpringBoot:2.3.12.RELEASE
  • Nacos:2.1.0
  • SpringCloud:Hoxton.SR12
  • SpringCloudAlibaba:2.2.8.RELEASE
  • Dubbo:3.1.11
  • JDK:8

3.项目结构

  • dubbo-study:父项目
  • dubbo-provider:服务提供者
  • dubbo-consumer:服务消费者
  • dubbo-api:提供服务定义的工程

4.dubbo-study父项目

<?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>
    <!-- Maven坐标 -->
    <groupId>cn.sgy.study</groupId>
    <artifactId>dubbo-study</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <!-- 基本信息 -->
    <name>dubbo-study</name>
    <description>Dubbo学习的父项目</description>
    <!-- 开发者 -->
    <developers>
        <developer>
            <name>sgy</name>
            <email>1259591265@qq.com</email>
            <url></url>
        </developer>
    </developers>
    <!-- 打包方式为jar -->
    <packaging>pom</packaging>
    <modules>
        <module>dubbo-api</module>
        <module>dubbo-provider</module>
        <module>dubbo-consumer</module>
    </modules>
    <!-- 属性配置 -->
    <properties>
        <!--JDK版本-->
        <java.version>1.8</java.version>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <!--字符集-->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <!--boot与cloud-->
        <spring-boot.version>2.3.12.RELEASE</spring-boot.version>
        <spring-cloud-alibaba-dependencies.version>2.2.8.RELEASE</spring-cloud-alibaba-dependencies.version>
        <spring-cloud-dependencies.version>Hoxton.SR12</spring-cloud-dependencies.version>
        <!-- JSON -->
        <fastjson.version>2.0.47</fastjson.version>
        <!-- 工具类库 -->
        <hutool-all.version>5.8.27</hutool-all.version>
        <http-client.version>4.5.13</http-client.version>
        <!-- 基础类库 -->
        <infrastructure.version>0.0.1-SNAPSHOT</infrastructure.version>
        <!-- 其他设置 -->
        <skipTests>true</skipTests>
    </properties>
    <!--  父依赖管理  -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud-dependencies.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba-dependencies.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <!-- 依赖 -->
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>
</project>

5.dubbo-api

依赖

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>cn.sgy.study</groupId>
        <artifactId>dubbo-study</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <!-- Maven坐标 -->
    <artifactId>dubbo-api</artifactId>
    <!-- 基础信息 -->
    <name>dubbo-api</name>
    <description>Dubbo的api模块</description>

</project>

User类

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User implements Serializable {
    private Long id;
    private String name;
    private String pwd;
    private String mobile;
}

UserService接口

public interface UserService {
    User getUserById(Long id);
    String aaa();
}

6.dubbo-provider

依赖

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>cn.sgy.study</groupId>
        <artifactId>dubbo-study</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>dubbo-provider</artifactId>
    <packaging>jar</packaging>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>cn.sgy.study</groupId>
            <artifactId>dubbo-api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>3.1.11</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-rpc-dubbo</artifactId>
            <version>3.1.11</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <configuration>
                    <mainClass>cn.sgy.study.dubboprovider.DubboProviderApplication</mainClass>
                    <layout>JAR</layout>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

配置

server:
  # 端口号
  port: 9090
  # Tomcat配置
  tomcat:
    uri-encoding: UTF-8
    threads:
      # 最大线程数
      max: 200
      # 最少10个空闲线程
      min-spare: 10
    # 连接超时时间为5秒
    connection-timeout: 5000ms
  servlet:
    # 项目根地址
    context-path: /
    # 编码
    encoding:
      enabled: true
      force: true
      charset: utf-8
spring:
  application:
    # 项目名称
    name: dubbo-provider
  # Servlet配置
  servlet:
    # 文件配置
    multipart:
      # 文件上传大小限制,设置最大值,不能超过该值,否则报错,
      max-file-size: 512MB
      # 文件最大请求限制,用于批量上传
      max-request-size: 512MB
  cloud:
    nacos:
      discovery:
        server‐addr: localhost:8848
        # 可能存在多网卡,指定一个ip就好了
        ip: 192.168.4.8
# dubbo的配置
dubbo:
  protocol:
    # 也是多网卡问题
    host: 192.168.4.8
    name: dubbo
    port: 20880
  application:
    name: dubbo-provider
  registry:
    address: nacos://localhost:8848

启动类添加注解

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

UserServiceImpl类

@DubboService
@Service
public class UserServiceImpl implements UserService {
    @Override
    public User getUserById(Long id) {
        User user = new User(1L, "sgy", "123456", "18143034290");
        return user;
    }

    @Override
    public String aaa() {
        return "aaa";
    }
}

7.dubbo-consumer

依赖

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>cn.sgy.study</groupId>
        <artifactId>dubbo-study</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>dubbo-consumer</artifactId>
    <packaging>jar</packaging>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>cn.sgy.study</groupId>
            <artifactId>dubbo-api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>3.1.11</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-rpc-dubbo</artifactId>
            <version>3.1.11</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <configuration>
                    <mainClass>cn.sgy.study.dubboconsumer.DubboConsumerApplication</mainClass>
                    <layout>JAR</layout>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

配置

server:
  # 端口号
  port: 7070
  # Tomcat配置
  tomcat:
    uri-encoding: UTF-8
    threads:
      # 最大线程数
      max: 200
      # 最少10个空闲线程
      min-spare: 10
    # 连接超时时间为5秒
    connection-timeout: 5000ms
  servlet:
    # 项目根地址
    context-path: /
    # 编码
    encoding:
      enabled: true
      force: true
      charset: utf-8
spring:
  application:
    # 项目名称
    name: dubbo-consumer
  # Servlet配置
  servlet:
    # 文件配置
    multipart:
      # 文件上传大小限制,设置最大值,不能超过该值,否则报错,
      max-file-size: 512MB
      # 文件最大请求限制,用于批量上传
      max-request-size: 512MB
  cloud:
    nacos:
      discovery:
        server‐addr: localhost:8848
        # 多网卡问题
        ip: 192.168.4.8
# dubbo的配置
dubbo:
  application:
    name: dubbo-consumer
  registry:
    address: nacos://localhost:8848
  provider:
    # 多网卡问题,这个好像加不加都行,我是给加上了
    host: 192.168.4.8

启动类添加注解

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

TestController类

@RestController
public class TestController {
    @DubboReference
    private UserService userService;

    @GetMapping("/test")
    public String test() {
        String aaa = userService.aaa();
        return aaa;
    }
}

8.启动测试

分别启动服务提供者和服务消费者,然后调用消费者的test接口即可