Spring Dubbo入门实例
- 创建父项目
- 1. 引入依赖
- 创建公共模块
- 1. 把接口写在公共模块,方便提供端实现
- 创建服务提供端
- 1. 引入依赖
- 2. 创建配置文件
- 3. 启动类
- 4. 创建接口实现类
- 创建服务消费端
- 1. 引入依赖
- 2. 创建配置文件
- 3. 启动类
- 4. 创建接口和实现类
- 注意事项
依赖环境:
JDK、Web环境:Tomcat、Maven、Zookeeper服务发现
源码:
创建父项目
1. 引入依赖
<!-- 父依赖 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
</parent>
创建公共模块
1. 把接口写在公共模块,方便提供端实现
因为在服务消费模块要引入接口来调提供端的实现,所以把接口放再公共模块
创建服务提供端
1. 引入依赖
<!-- 引入dubbo -->
<!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 注册中心使用的是zookeeper,引入操作zookeeper的客户端端 -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<!-- spring-cloud版本 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2. 创建配置文件
dubbo:
application:
name: provider-server
registry: #注册中心 zookeeper
address: 127.0.0.1:2181
protocol: zookeeper
protocol: #dubbo的内部通信配置
name: dubbo
port: 20880
scan:
base-packages: com.zb.service.impl
spring: # 数据库连接
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/shop_order?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username: root
password: ok
mybatis:
mapper-locations: classpath:mapper/*.xml
configuration:
auto-mapping-behavior: full
3. 启动类
@EnableDubbo // 开始dubbo通信
package com.ddz;
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
@SpringBootApplication
@EnableDubbo // 开始dubbo通信
@EnableHystrix // 熔断
public class MyProvider {
public static void main(String[] args) {
SpringApplication.run(MyProvider.class, args);
}
}
4. 创建接口实现类
创建服务消费端
1. 引入依赖
<!-- 引入dubbo -->
<!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 注册中心使用的是zookeeper,引入操作zookeeper的客户端端 -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
<!-- spring-cloud版本 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2. 创建配置文件
server:
port: 9090
dubbo:
application:
name: consumer-server
registry:
address: 127.0.0.1:2181
protocol: zookeeper
scan:
base-packages: com.ddz.service.impl
consumer:
check: false # 全局都不检查 服务提供端
timeout: 2000 # 全局服务调用超时时间 2s
retries: 5 # 全局服务超时 重试次数 --------------------注意幂等性问题
3. 启动类
@EnableDubbo
package com.ddz;
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
@SpringBootApplication
@EnableDubbo
//@EnableHystrix
public class MyConsumer {
public static void main(String[] args) {
SpringApplication.run(MyConsumer.class, args);
}
}
4. 创建接口和实现类
注意事项
- 引入连接数据库的依赖,同时需要引入springcloud的版本依赖
- 在每个模块启动类加上注解
- 在服务提供端 的实现类上加的注解是 alibaba的
- 在服务消费端 注入接口时 加上 @Reference 注解 是alibaba的