首页 > 其他分享 >SpringBoot集成Dubbo案例

SpringBoot集成Dubbo案例

时间:2022-09-30 11:09:08浏览次数:71  
标签:集成 Dubbo 服务 SpringBoot 提供者 dubbo student 组件 id


SpringBoot集成Dubbo:Case

SpringBoot集成Dubbo案例_spring boot

1、什么是Duubo?

Dubbo是一款高性能的,由阿里巴巴开发的一款​​RPC远程调用框架​​,已交由apache组织进行维护。他使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 [1] Spring框架无缝集成。

官方网址:https://dubbo.apache.org/zh/

2、概念架构

SpringBoot集成Dubbo案例_spring boot_02

2.1 提供者

provider:即在分布式的服务中,真正实现业务的组件。简单讲就是提供服务的

2.2 消费者

consumer:即在分布式的服务中,调用业务逻辑的组件。消费提供者提供的服务的

2.3 注册中心

registry:用于监听提供者所提供的服务变化等。Dubbo的四种主要的注册中心:

  1. ZooKeeper
  2. Redis
  3. Simple
  4. Multicast

3、SpringBoot集成Dubbo步骤

  1. 注册中心
  2. 服务提供者
  3. 服务消费者
  4. 服务公共组件

1️⃣准备注册中心

这里使用的zookeeper注册中心,安装自行去网上搜有很多,这里不再赘述,安装好后,开启zookeeper注册中心。

2️⃣准备服务的公共组件

公共组件这里采用的是普通的maven项目,主要定义一些实体类和公共接口

SpringBoot集成Dubbo案例_java_03


model

private Integer id;
private String name;
private Integer age;

service

Student queryById(Integer id);

3️⃣准备一个提供者的组件

这里使用SpringBoot来创建,目录结构如下所示:

SpringBoot集成Dubbo案例_spring boot_04


在提供者的组件中,首先先引入依赖

  1. 公共组件的依赖
  2. dubbo的依赖
  3. zookeeper的依赖

​注意​​在引入zookeeper的依赖的时候,需要排除log4j所引发的重复引入的错误

<dependencies>
<!-- 引入公共依赖项 -->
<dependency>
<groupId>com.wei</groupId>
<artifactId>DHC_DubboProject-common</artifactId>
<version>1.0.0</version>
</dependency>

<!-- 引入dubbo的依赖 -->
<!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.8</version>
</dependency>
<!-- zookeeper依赖 -->
<!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-dependencies-zookeeper -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>2.7.8</version>
<type>pom</type>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

然后完成业务的实现

@Component
@DubboService(interfaceClass = IStudentService.class,version = "1.0")
public class StudentServiceImpl implements IStudentService{

/**
* 提供服务的方法
*/
@Override
public Student queryById(Integer id) {
Student student = new Student();
if (1001==id) {
student.setAge(21);
student.setId(id);
student.setName("张三");
}else if (1002==id) {
student.setAge(22);
student.setId(id);
student.setName("李四");
}
return student;
}
}

使用注解使用注解@DubboService:来指定其具体所实现的业务接口的类及版本等

配置文件

# 配置服务名称
spring:
application:
name: StudentService-provider

# 配置扫描的包
dubbo:
scan:
base-packages: com.wei.service

# 配置dubbo协议
# protocol:
# name: dubbo
# port: 20881
registry:
address: zookeeper://localhost:2181

4️⃣完成消费者组件

SpringBoot集成Dubbo案例_spring boot_05

消费者与提供者所依赖的包都基本一样,所以直接拷贝提供者的依赖文件

controller测试

@RestController
public class DubboController {

/**
* 引用远程服务 把创建好的远程服务注入给消费者
*/
@DubboReference(interfaceClass = IStudentService.class,version = "1.0")
private IStudentService service;

@PostMapping("/queryById/{id}")
public Student queryById(@PathVariable("id") Integer id) {

Student student = service.queryById(id);
return student;
}
}

配置文件

# 指定服务名称
server:
port: 8081
spring:
application:
name: consumer-application

# 指定注册中心
dubbo:
registry:
address: zookeeper://localhost:2181

4、测试

  1. 启动zookeeper
  2. 启动提供者服务
  3. 启动消费者服务
  4. postman测试

SpringBoot集成Dubbo案例_spring_06


成功!!!

总结

Dubbo注解:
@DubboService:在提供者端使用,暴露服务的,放在接口的实现类上面
@Dubboreference:在消费者端使用,引用服务的,放在属性上面,用于注入服务的引用接口。
@EableDubbo:放在主程序类上面,表示当前引用启用Dubbo功能。


标签:集成,Dubbo,服务,SpringBoot,提供者,dubbo,student,组件,id
From: https://blog.51cto.com/u_14957231/5725613

相关文章