文章目录
1.简介
Dubbo是阿里开源的一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
2.核心组件
- Remoting: 网络通信框架,实现了 sync-over-async 和request-response 消息机制.
- RPC: 一个远程过程调用的抽象,支持负载均衡、容灾和集群功能
- Registry: 服务目录框架用于服务的注册和服务事件发布和订阅
3.主要的四个模块
- Provider
暴露服务方称之为服务提供者 - Consumer
调用远程服务方称之为服务消费者 - Registry
服务注册与发现的中心目录服务称之为服务注册中心 - Monitor
统计服务的调用次数和调用时间的日志服务称之为服务监控中心
4.应用实战
4.1.项目代码结构
项目名 | 描述 |
---|---|
dobbo-parent | 聚合工程,统一管理版本号 |
consumer | 服务消费者 |
common-api | 通用接口api |
dubbo-admin-master | dobbo控制台及注册中心和监控中心。(本文章只讲控制台) |
provider | 服务提供者 |
4.2.聚合工程
修改dobbo-parent的依赖,common-api依赖需要common-api模块通过mvn install发布到本地仓库再引用
<properties>
<java.version>1.8</java.version>
<springboot-dobbo.version>0.2.0</springboot-dobbo.version>
<common-api.version>1.0-SNAPSHOT</common-api.version>
</properties>
<!--统一管理版本号-->
<dependencyManagement>
<dependencies>
<!-- 引入spring-boot-starter以及dubbo和curator的依赖 -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>${springboot-dobbo.version}</version>
</dependency>
<!--接口统一api-->
<dependency>
<groupId>com.ljm.boot.dobbo</groupId>
<artifactId>common-api</artifactId>
<version>${common-api.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
4.3.通用api
common-api是一个定义通用的接口模块,
下面代码中定义了数据模型和服务提供者的接口
public class User implements Serializable {
private String userName;
private String age;
private String address;
//省略get,set方法
}
/**
* @Description 服务提供者接口
**/
public interface UserService {
User getUserInfo(Integer userId);
}
4.4.服务提供者
4.4.1.引入依赖
版本在dobbo-parent中指定,所以无需指定版本号
<dependencies>
<!--引入通用模块-->
<dependency>
<groupId>com.ljm.dobbo</groupId>
<artifactId>common-api</artifactId>
</dependency>
<!-- 引入spring-boot-starter以及dubbo和curator的依赖 -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
</dependencies>
4.4.2.配置文件
dubbo:
application:
name: user-service-provider
registry:
#注册中心协议
protocol: zookeeper
#注册中心的地址
address: localhost:2181
protocol:
name: dubbo
port: 20881
monitor:
#指定注册中心也是监控中心
protocol: registr
4.4.3.服务提供者代码逻辑
@Service//注解不是 springframework包的,是dubbo包下的
@Component
public class UserServiceImpl implements UserService {
private ArrayList<User> list=new ArrayList<>();
/**
* 制造假数据,实际环境应该重数据库获取
*/
{
User user=new User();
user.setUserName("张三");
user.setAge("18");
user.setAddress("北京大兴");
User user1=new User();
user1.setUserName("李四");
user1.setAge("19");
user1.setAddress("北京大兴");
User user2=new User();
user2.setUserName("王五");
user2.setAge("20");
user2.setAddress("北京大兴");
list.add(user);
list.add(user1);
list.add(user2);
}
@Override
public User getUserInfo(Integer userId) {
return list.get(userId);
}
}
4.4.4.修改启动类
在启动类加上@EnableDubbo注解
4.4.5.启动服务提供者
因为注册中心和监控中心都用的zookeeper,所以先启动zookeeper
然后启动服务提供者,然道下图中的[Dubbo] Current Spring Boot Application is await… ,代表启动成功了.
4.5.服务消费者
4.5.1.引入依赖
<dependencies>
<!--引入通用模块-->
<dependency>
<groupId>com.ljm.dobbo</groupId>
<artifactId>common-api</artifactId>
</dependency>
<!-- 引入spring-boot-starter以及dubbo和curator的依赖 -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
</dependencies>
4.5.2.配置文件
server:
port: 8009
dubbo:
application:
name: order-service-consumer
registry:
#注册中心地址
address: zookeeper://localhost:2181
monitor:
protocol: registry
4.5.3.服务消费者代码逻辑
通过@Reference注解引用远程服务
public interface OrderService {
User InitOrder(Integer userId);
}
@Service //注解不是 springframework包的,是dubbo包下的
@Component
public class OrderServiceImpl implements OrderService {
@Reference
UserService userService;
@Override
public User InitOrder(Integer userId) {
return userService.getUserInfo(userId);
}
}
4.5.4.添加web接口用于测试
@RestController
public class WebController {
@Autowired
OrderService orderService;
@GetMapping("/initOrder/{userId}")
public User initOrder(@PathVariable Integer userId){
return orderService.InitOrder(userId);
}
}
4.5.5.修改启动类
在启动类加上@EnableDubbo注解
4.5.6.启动项目测试
访问 http://127.0.0.1:8009/initOrder/1,看到下面结果代表着RPC调用成功了.
4.6.dubbo控制台使用
4.6.1.下载dubbo-admin
4.6.2.修改配置文件
server.port=7001
spring.velocity.cache=false
spring.velocity.charset=UTF-8
spring.velocity.layout-url=/templates/default.vm
spring.messages.fallback-to-system-locale=false
spring.messages.basename=i18n/message
#root用户的密码
spring.root.password=root
#guest用户的密码
spring.guest.password=root
#配置注册中心地址
dubbo.registry.address=zookeeper://localhost:2181
4.6.3.启动dubbo-admin
访问 http://localhost:7001/
输入用户名 root,密码root登录系统就可以看到下面的页面了
5.项目配套代码
创作不易,要是觉得我写的对你有点帮助的话,麻烦在gitee上帮我点下 Star
【SpringBoot框架篇】其它文章如下,后续会继续更新。
- 1.搭建第一个springboot项目
- 2.Thymeleaf模板引擎实战
- 3.优化代码,让代码更简洁高效
- 4.集成jta-atomikos实现分布式事务
- 5.分布式锁的实现方式
- 6.docker部署,并挂载配置文件到宿主机上面
- 7.项目发布到生产环境
- 8.搭建自己的spring-boot-starter
- 9.dubbo入门实战
- 10.API接口限流实战
- 11.Spring Data Jpa实战
- 12.使用druid的monitor工具查看sql执行性能
- 13.使用springboot admin对springboot应用进行监控
- 14.mybatis-plus实战
- 15.使用shiro对web应用进行权限认证
- 16.security整合jwt实现对前后端分离的项目进行权限认证
- 17.使用swagger2生成RESTful风格的接口文档
- 18.使用Netty加websocket实现在线聊天功能
- 19.使用spring-session加redis来实现session共享
- 20.自定义@Configuration配置类启用开关
- 21.对springboot框架编译后的jar文件瘦身
- 22.集成RocketMQ实现消息发布和订阅
- 23.集成smart-doc插件零侵入自动生成RESTful格式API文档
- 24.集成FastDFS实现文件的分布式存储
- 25.集成Minio实现文件的私有化对象存储
- 26.集成spring-boot-starter-validation对接口参数校验
- 27.集成mail实现邮件推送带网页样式的消息
- 28.使用JdbcTemplate操作数据库
- 29.Jpa+vue实现单模型的低代码平台
- 30.使用sharding-jdbc实现读写分离和分库分表
- 31.基于分布式锁或xxx-job实现分布式任务调度
- 32.基于注解+redis实现表单防重复提交
- 33.优雅集成i18n实现国际化信息返回
- 34.使用Spring Retry完成任务的重试