Dubbo使用心得
  eP72s9Xafzwi 2023年11月15日 38 0

1.Dubbo的两种开发思路

a.基于SOA思想

Dubbo使用心得_序列化

b.辅助SpringCloud框架提升效率

Dubbo使用心得_git_02

2.Dubbo的基本架构

服 务 提 供 者 在 启 动 时 , 向 注 册 中 心 注 册 自 己 提 供 的 服 务 。 
服 务 消 费 者 在 启 动 时 , 向 注 册 中 心 订 阅 自 己 所 需 的 服 务 。 
注 册 中 心 返 回 服 务 提 供 者 地 址 列 表 给 氵 肖 费 者 》 如 果 有 变 更 , 注 册 中 心 将 基 于 长 连 接 准 送 变 更 数 据 给 消 费 者 。 
服 务 消 费 者 , 从 提 供 者 地 址 列 表 中 , 基 于 负 载 均 衡 算 法 , 选 择 提 供 者 进 行 调 用 。 
服 务 消 费 者 和 提 供 者 , 在 内 存 中 累 计 调 用 次 数 和 调 用 时 间 , 定 时 每 分 钟 发 送 一 次 统 计 数 据 到 监 控 中 心 。

3.Dubbo入门实践

a. 搭建注册中心

搭建Nacos

找 到 今 日 资 料 中 的 nacos 安 装 包 
过 nacos-server-l .4.1.zip 
2 、 解 压 到 没 有 中 文 和 持 殊 字 符 的 目 录 
3 、 进 入 bin 目 录 , 执 行 启 动 命 令 
#进 入 bin 目 录 
cd bin 
# 启 动 
startup. cmd . standalone 
4 、 浏 览 器 看 : http://127 . 0 . 0 . 1 :8848/nacos

b.搭建监控中心

搭建dubbo-admin

1.通过git远程拉取

git clone https://github.com/apache/dubbo-admin.git

2.指定注册中心地址

在目录:  

修改

dubbo-admin-server/src/main/resources/

application.properties

3.构建

mvn clean package -D maven.test.skip=true

4.启动

mvn --projects dubbo-admin-server spring-boot:run

cd dubbo-admin-distribution/target;

java -jar dubbo-admin-0.1.jar

5.访问

http://localhost:8080

 

c.代码开发

编写服务提供者和消费者完成远程调用

结合案例实现:

需求:使用Dubbo构建分布式架构,完成根据用户id查询用户信息

模型图:

Web 
/user/l 
user-consumer 
"username 
add re S s 
user-provider

 

步骤1:搭建服务提供者user-provider

1、创建提供者模块引入依赖

2、将 service ,mapper ,domain导入到提供者模块中

3、将UserService暴露为dubbo服务

pubboSeNice 
public class userServiceInpI implements user-Service {

 

4、application.yml 配置

dubbo: 
protocol : 
name: dubbo 
port: 
registry: 
address: 
scan : 
base- packages : 
• //127.ø.e.1:8848 
cn. itcast. user. service

 

知识扩充

服务提供者配置

dubbo.protocol.name=dubbo

dubbo.protocol.port=20881

Tomcat:18080 
服勢i肖費名

 

服务消费者直接访问内置的Netty服务器,而Tomcat服务器用来支持应用运行启动的服务器。

 

步骤2:搭建服务消费者user-consumer

1、创建提供者模块并引入依赖

2、将controller,service接口导入到提供者模块中

3、在Controller中引入dubbo服务

@RestControIIer 
public class user-controller { 
pubboReference 
private user-Service user-service;

 

4、application.yml 配置

dubbo 
regi stry : 
address :

 

 

4.Dubbo最佳实践(抽取公共接口模块)

通过上面服务的搭建,发现存在一些问题,每个模块还存在公共的接口、实体类。

解决方案:

将API接口抽取为独立模块,并且把接口有关的domian都放在模块中,在各个服务中通过依赖的方式调用。

 

user-api 
userService 
User 
user-consumer 
UserController 
user-provider 
Userservicelmpl 
pubboReference 
private userService userService; 
@DubboService 
public class UserServiceImpI 
implements Userservice {

 

 

 

5.Dubbo序列化接口(重点)

使用Dubbo开发时,传输对象时,必须将对象实现序列化接口

 

两个机器传输数据,在RPC通信时,往往采用二进制数据格式,故需要将对象进行序列化处理。

user-consumer 
User 
user-provider 
user

注意:Dubbo内部已经将序列化和反序列化的过程内部封装了,在定义domian类时实现 Serializable 接口即可

 

 

总结:

Dubbo 的 服 务 暴 露 与 调 用 
在服务实现类上通过@Du bboServiceE 露 服 务 
在消费者端iü@DubboReference引用服务 
2 、 Dubbo 中 传 输 对 象 
在 RPC 框 架 中 , 往 往 通 过 TCP 协 议 进 行 数 据 传 输 
对 象 需 要 实 现 序 列 化 接 口 Seria | izab 《 e 
3 、 在 实 际 开 发 中 往 往 将 接 口 和 实 体 类 抽 取 到 公 共 模 块

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月15日 0

暂无评论

推荐阅读
eP72s9Xafzwi