当一个人先从自己的内心开始奋斗,他就是个有价值的人
【Dubbo】
主要内容
- Dubbo简介
- Dubbo架构讲解
- Dubbo支持的协议
- Dubbo支持的注册中心
- 第一个Dubbo的Provider
- Admin管理界面搭建
- 完成Dubbo的Consumer
- 完整Dubbo项目演示
一、 Dubbo简介
1. 官方说明
Apache Dubbo 是一个高可用的,基于Java的开源RPC框架。
Dubbo框架不仅仅是具备RPC访问功能,还包含服务治理功能。
2. 发展历史
- Dubbo是最开始是阿里巴巴内部使用的RPC框架。
- 2011年对外提供。
- 2012年停止更新。
- 2017年开始继续更新。
- 2019年捐献给Apache,由Apache维护2.7以上版本。
二、 Dubbo架构讲解
1. 架构图
2. 架构说明
2.1 虚线
虚线表示异步,实线表示同步。异步不阻塞线程性能高,同步阻塞线程必须等待响应结果才能继续执行,相对性能低。
2.2 Provider
提供者。编写持久层、业务层和事务代码。
2.3 Container
容器(Spring容器),Dubbo完全基于Spring实现的。
2.4 Registry
注册中心。放置所有Provider对外提供的信息。包含Provider的IP,访问端口,访问遵守的协议,对外提供的接口,接口中有哪些方法等相关信息。
2.5 Consumer
消费者(RPC调用者,SOA调用服务的项目)开发中也是一个项目,编写service和controller(还可以包括页面等)。调用远程服务实现(XXXXServiceImpl)中的方法。
2.6 Monitor
监控中心。监控Provider的压力情况等。每隔2分钟Consumer和Provider会把调用次数发送给Monitor,由Monitor进行统计。
3. 执行流程
- start:启动Spring容器时会把Provider启动。
- register:把Provider相关信息注册到Registry里
- subscribe:Consumer从Registry中订阅Provider的信息
- notify:通知给Consumer
- invoke:Consumer根据Registry通知的信息进行调用Provider中方法。
- count:Consumer和Provider把调用次数信息异步发送给Monitor进行统计。
三、 Dubbo支持的协议
1. Dubbo协议(官方推荐协议)
- 优点:
采用NIO复用单一长连接,并使用线程池并发处理请求,减少握手和加大并发效率,性能较好(推荐使用)
- 缺点:
大文件上传时,可能出现问题(不使用Dubbo实现文件传输)
2. RMI(Remote Method Invocation)协议
- 优点:
JDK自带的能力。
- 缺点:
偶尔连接失败.
3. Hessian协议
- 优点:
可与原生Hessian互操作,基于HTTP协议
- 缺点:
需hessian.jar支持,http短连接的开销大
四、 Dubbo支持的注册中心
1. Zookeeper(官方推荐)
- 优点:
支持分布式.很多周边产品.
- 缺点:
受限于Zookeeper软件的稳定性.Zookeeper专门分布式辅助软件,稳定较优
2. Multicast
- 优点:
去中心化,不需要单独安装软件.
- 缺点:
2.2.1 Provider、Consumer和Registry不能跨机房(路由)
3. Redis
- 优点:
支持集群,性能高
- 缺点:
要求服务器时间同步.否则可能出现集群失败问题.
4. Simple
- 优点:
标准RPC服务.没有兼容问题
- 缺点:
不支持集群.
五、 第一个Dubbo的Provider
新建父项目Parent1。最终结构如下:
编写pom.xml继承SpringBoot父项目。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
</parent>
1. 新建api项目
1.1 创建接口
创建com.bjsxt.dubbo.service.DemoDubboService接口
public interface DemoDubboService {
String demo();
}
2 新建provider项目
2.1 编写pom.xml
注意:不需要依赖web,如果依赖spring-boot-start-web还需要考虑端口问题。
<dependencies>
<dependency>
<artifactId>api</artifactId>
<groupId>com.bjsxt</groupId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.2.0</version>
</dependency>
</dependencies>
2.2 编写配置文件
新建application.yml
dubbo:
application:
name: dubbo-provider
registry:
address: zookeeper://192.168.32.128:2181
2.3 新建实现类
新建com.bjsxt.dubbo.service.impl.DemoDubboServiceImpl
注意:注解是apache的注解。
import com.bjsxt.dubbo.service.DemoDubboService;
import org.apache.dubbo.config.annotation.Service;
@Service
public class DemoDubboServiceImpl implements DemoDubboService {
@Override
public String demo() {
System.out.println("demo方法");
return "123";
}
}
2.4 新建启动类
新建com.bjsxt.ProviderApplication。
必须要有@EnableDubbo注解,否则Dubbo不生效。
@SpringBootApplication
@EnableDubbo
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class,args);
}
}
六、admin管理界面搭建
1. dubbo-admin-server-0.2.0.jarBOOT-INFclasses 中application.properties里面注册中心的ip设置正确
2. 使用java -jar dubbo-admin-server-0.2.0.jar运行即可。访问http://localhost:8080可以进入Dubbo Admin管理控制台。
注意:占用8080端口,不要冲突了。
七、 完成Dubbo的Consumer
创建consumer项目
1. 编写pom.xml
<dependencies>
<dependency>
<artifactId>api</artifactId>
<groupId>com.bjsxt</groupId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.2.0</version>
</dependency>
</dependencies>
2. 新建配置文件
新建application.yml
dubbo:
application:
name: dubbo-consumer
registry:
address: zookeeper://192.168.32.128:2181
3. 新建service及实现类
新建com.bjsxt.service.DemoService
public interface DemoService {
String consumerDemo();
}
新建com.bjsxt.service.impl.DemoServiceImpl
调用服务使用@Reference注解,不要导错包了,有两个。
import com.bjsxt.dubbo.service.DemoDubboService;
import com.bjsxt.service.DemoService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;
@Service
public class DemoServiceImpl implements DemoService {
@Reference
private DemoDubboService demoDubboService;
@Override
public String consumerDemo() {
return demoDubboService.demo();
}
}
4. 新建控制器
新建控制器com.bjsxt.controller.DemoController
@Controller
public class DemoController {
@Autowired
private DemoService demoService;
@RequestMapping("/demo")
@ResponseBody
public String demo(){
return demoService.consumerDemo();
}
}
5. 新建启动器
新建com.bjsxt.ConsumerApplication
@SpringBootApplication
@EnableDubbo
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class,args);
}
}
需要更多Java学习资料的可以到评论区留言或者私信哦,视频、源码、项目,通通都给你