SpringBoot集成Dubbo案例

在这里插入图片描述

1、什么是Duubo?

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

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

2、概念架构

在这里插入图片描述

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项目,主要定义一些实体类和公共接口
在这里插入图片描述
model

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

service

Student queryById(Integer id);

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

这里使用SpringBoot来创建,目录结构如下所示:
在这里插入图片描述
在提供者的组件中,首先先引入依赖

  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️⃣完成消费者组件

在这里插入图片描述

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

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测试

在这里插入图片描述
成功!!!

总结

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@WAT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值