分布式理论 & RPC & Dubbo

分布式服务框架(RPC)
用于提高机器利用率的资源调度和治理中心*(SOA)[ Service Oriented Architecture]
Dubbo(RPC框架)
服务提供者**(Provider)**:暴露服务的服务提供方,服务提供者在启动时,向注册中心注册自己提 供的服务。
服务消费者**(Consumer)**: 调用远程服务的服务消费方,服务消费者在启动时,向注册中心订阅自 己所需的服务,服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如 果调用失败,再选另一台调用。
注册中心**(Registry)**:注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基 于长连接推送变更数据给消费者
监控中心**(Monitor)**:服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发 送一次统计数据到监控中心
荐我们使用Zookeeper 注册中心
Zookeeper官网:https://zookeeper.apache.org/
下载地址:https://archive.apache.org/dist/zookeeper/
修改zkServer.cmd 添加"-Dzookeeper.audit.enable=true"
先打开服务端,再打开客户端
简单测试使用
s /:列出zookeeper根下保存的所有节点 create –e /oop 123:创建一个oop节点,值为123 get /oop:获取/kuangshen节点的值
安装Dubbo
dubbo-admin-master-0.2.0\dubbo-admin\src\main\resources #注册中心的地址 注意端口号 dubbo.registry.address=zookeeper://127.0.0.1:2181
在项目目录下打包dubbo-admin
mvn clean package -Dmaven.test.skip=true
若是没有配置maven环境(用的IDEA的)
把dubbo-admin在idea中打开(执行main方法)就行(记得提前开启Zookeeper服务)
访问
http://localhost:7001/ (账号密码都是root)
dubbo-admain: 是一个监控管理后台 ,查看我们注册了哪些服务,哪些服务被消费
搭建一个简单的环境
流程:
provider--->注册中心--->consumer
创建好provider项目(做好服务)与consumer项目
先开启zkServer,然后开启provider,再打开dubbo-admin就可以在界面中查看到相关的服务提供者,然后consumer去获取需要的服务就行
2.让provider连接注册中心
导入依赖

<dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.8</version> </dependency> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency> <!-- 引入zookeeper--> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>5.2.1</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>5.2.1</version> </dependency> <!-- 注意 zookeeper 日志冲突--> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.6.3</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency>
配置

server.port=8001 #服务应用名字 dubbo.application.name=provider-server #注册中心地址 dubbo.registry.address=zookeeper://127.0.0.1:2181 #哪些服务要被注册 dubbo.scan.base-packages=com.ljm.service
加注解 2个

//服务注册与发现 @Service //注入bean @DubboService //注册中心相关 ,项目启动就自动注册到注册中心 public class TIcketServiceImpl implements TIcketService{ @Override public String getTicket() { return "您的票号55678"; } }
启动dubbo-admin( 访问http://localhost:7001/)
3.consumer消费
导入依赖(与provider相同)
创建一个与provider相同的接口
配置

server.port=8002 #去哪里拿服务 需要暴露自己的名字 dubbo.application.name=consumer-server #注册中心地址 dubbo.registry.address=zookeeper://127.0.0.1:2181
获取服务

@Service public class UserService1 { @DubboReference //引用 也可以用pom坐标,可以定义路径相同的接口名 TIcketService ICKET_SERVICE; //与provider相同的接口 public void buyTicker(){ String ticket = ICKET_SERVICE.getTicket(); System.out.println("拿到票:"+ticket); } } //测试 @SpringBootTest class ConsumerServerApplicationTests { @Autowired UserService1 userService1; @Test void contextLoads() { userService1.buyTicker(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律