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接口即可