Spring Boot 整合Dubbo + Zookeeper 实现分布式 消费者与服务者的业务调用 | 您所在的位置:网站首页 › dubbo协议和rpc的关系 › Spring Boot 整合Dubbo + Zookeeper 实现分布式 消费者与服务者的业务调用 |
我正在参加「掘金·启航计划」 一、什么是Dubbo?Dubbo是阿里出品的分布式开源服务框架,阿里已交予Apache开源组织基金会 Apache Dubbo 是一款高性能、轻量级的开源RPC服务框架 Dubbo官网 ☁️基本概念服务提供者(Provider):暴露服务的服务提供方,服务提供者在启动时,向注册中心注册自己提供的服务。 服务消费者(Consumer): 调用远程服务的服务消费方,服务消费者在启动时,向注册中心订阅自己所需的服务,服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。 注册中心(Registry):注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者 监控中心(Monitor):服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心 ❄️Dubbo的服务提供者与服务消费者的调用关系 服务容器启动,加载,运行服务提供者 服务提供者在启动时,向注册中心注册自己提供的服务 服务消费者在启动时,向注册中心订阅自己需要的服务 注册中心返回服务提供者地址列表给服务消费者,如果有变更,注册中心将基于长连接推送变更数据给服务消费者 服务消费者,从服务提供者地址列表中,基于软负载均衡算法,选一台服务提供者进行调用,如果调用失败,再选另一台调用 服务消费者和服务提供者,再内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心 二、什么是RPC?RPC【Remote Procedure Call】是指远程过程调用,是一种进程间通信方式,他是一种技术的思想,而不是规范。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。即程序员无论是调用本地的还是远程的函数,本质上编写的调用代码基本相同。 ☎️RPC基本原理示意图 详细版本 RPC两个核心模块:序列化和通讯 三、Dubbo的特点及好处Apache Dubbo |ˈdʌbəʊ| 提供了六大核心能力:面向接口代理的高性能RPC调用,智能容错和负载均衡,服务自动注册和发现,高度可扩展能力,运行期流量调度,可视化的服务治理与运维。 Dubbo的注册中心 Dubbo的注册中心有很多种,但官方推荐使用Zookeeper,其余有Redis、Multicast、Simple注册中心。 复制代码Dubbo网络通信框架 Dubbo 默认使用 Netty 框架,也是推荐的选择,另外内容还集成有Mina、Grizzly。 复制代码 四、Zookeeper是什么?顾名思义 zookeeper 就是动物园管理员,他是用来管 hadoop(大象)、Hive(蜜蜂)、pig(小 猪)的管理员, Apache Hbase 和 Apache Solr 的分布式集群都用到了 zookeeper;Zookeeper: 是一个分布式的、开源的程序协调服务,是 hadoop 项目下的一个子项目。他提供的主要功 能包括:配置管理、名字服务、分布式锁、集群管理。 五、搭建Zookeeper注册中心 ♻️安装Zookeeper访问Zookeeper官网下载 下载Zookeeper 下载 压缩包格式的zookeeper 将下载的文件解压缩 从cmd窗口进入Zookeeper文件夹下的bin目录,执行zkServer.cmd启动 如果报错提示 zoo.cfg缺失,那就进入zookeeper的conf文件夹下将zoo_sample.cfg复制一份改名为zoo.cfg即可 再次重启则成功 六、搭建Dubbo管理控制台 ✒️克隆dubbo-admin 项目从 github打开项目 dubbo-admin dubbo-admin 从GitHub爬取项目教程如下: 使用 Git爬取 GitEE、GitLab、GitHub项目的教程 ✅运行dubbo-admindubbo-admin采用前后端分离的形式管理项目 爬取文件如下 运行后端项目必须启动 zookeeper,否则启动失败 cmd窗口进入dubbo-admin-server,执行以下命令 mvn clean package 复制代码打包部署项目 在这里等大概5分钟左右即可部署完成 部署完成后生成target目录
cmd窗口进入target目录执行以下命令 java -jar dubbo-admin-server-0.4.0.jar 复制代码后端项目运行成功~ ♨️部署dubbo-admin-ui在这里需要有 node 环境 教程如下 GitHub爬取项目并部署前端工程 cmd窗口进入dubbo-admin-ui,执行以下命令下载依赖 npm install 复制代码下载完毕后,执行启动命令 npm run dev 复制代码启动成功 访问前端生成的本地地址 默认用户名密码均为root 输入即可登录成功 后端的地址必须和前端工程vue.config.js下的target路径一样,否则404! 基于SpringBoot项目整合Dubbo + Zookeeper 实现消费者消费服务提供者的服务 消费者为订单模块,传入用户id去查询用户模块的用户信息,实现远程RPC调用服务,分布式调用,而不是单体架构 服务提供者为用户模块,返回用户信息 ♻️项目结构图pom.xml 4.0.0 org.springframework.boot spring-boot-starter-parent 2.5.5 org.example dubbo-boot pom 1.0-SNAPSHOT GmallPublicInterface UserServiceProvider OrderServiceConsumer 8 8 复制代码 🚃公共API模块 GmallPublicInterfacepom.xml dubbo-boot org.example 1.0-SNAPSHOT 4.0.0 GmallPublicInterface 8 8 com.alibaba dubbo 2.6.2 org.apache.curator curator-framework 2.12.0 com.alibaba.boot dubbo-spring-boot-starter 0.2.0 复制代码还有一些核心的接口及实体类 🚃服务提供者模块 UserServiceProviderpom.xml dubbo-boot org.example 1.0-SNAPSHOT 4.0.0 UserServiceProvider 8 8 org.example GmallPublicInterface 1.0-SNAPSHOT org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-maven-plugin src/main/java **/*.xml false src/main/resources libs/ libs **/*.jar 复制代码application.yml # 配置端口号 server: port: 8084 # 配置Dubbo dubbo: application: name: UserServiceProvider registry: address: zookeeper://127.0.0.1:2181 protocol: name: dubbo port: 20881 monitor: protocol: registry consumer: timeout: 2000 复制代码UserServiceImpl package com.wanshi.service.impl; import com.alibaba.dubbo.config.annotation.Service; import com.wanshi.bean.UserAddress; import com.wanshi.service.UserService; import java.util.Arrays; import java.util.List; @Service public class UserServiceImpl implements UserService { @Override public List getUserAddressList(String userId) { System.out.println("UserServiceImpl.....old..."); // TODO Auto-generated method stub UserAddress address1 = new UserAddress(1, "北京市朝阳区", "1", "Bug 终结者", "010-5625321", "Y"); UserAddress address2 = new UserAddress(2, "北京市海淀区", "1", "小王", "010-66253834", "N"); return Arrays.asList(address1,address2); } } 复制代码 🚃服务消费者模块 OrderServiceConsumerpom.xml dubbo-boot org.example 1.0-SNAPSHOT 4.0.0 OrderServiceConsumer 8 8 org.example GmallPublicInterface 1.0-SNAPSHOT org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-maven-plugin src/main/java **/*.xml false src/main/resources libs/ libs **/*.jar 复制代码application.yml # 配置端口 server: port: 8085 # 配置Dubbo dubbo: application: name: OrderServiceConsumer registry: address: zookeeper://127.0.0.1:2181 monitor: protocol: registry consumer: check: false 复制代码OrderController package com.wanshi.gmall.service.impl; import com.alibaba.dubbo.config.annotation.Reference; import com.alibaba.dubbo.validation.MethodValidated; import com.wanshi.bean.UserAddress; import com.wanshi.service.OrderService; import com.wanshi.service.UserService; import org.springframework.stereotype.Service; import java.util.List; /** * 1.将服务提供者注册到注册中心 (暴露服务) * 1). 导入 dubbo 依赖 2.6.2、引入操作zookeeper的客户端 * 2). 配置服务提供者 * * 2.让服务消费者去注册中心订阅服务提供者的服务地址 * @author whc */ @Service public class OrderServiceImpl implements OrderService { @Reference UserService userService; @Override public List initOrder(String userId) { //1. 查询用户的收货地址 List userAddressList = userService.getUserAddressList(userId); System.out.println("用户id:" + userId); userAddressList.forEach(user -> { System.out.println(user.getUserAddress()); }); return userAddressList; } } 复制代码 📜代码下载Spring Boot 整合 Dubbo + Zookeeper 实现服务者与消费者的数据调用 ♨️往期精彩热文回顾✈️ 3分钟带你搞懂Vue双向绑定原理及问题剖析 ✈️ Netty进阶 -- WebSocket长连接开发 ✈️ Netty进阶 -- 非阻塞网络编程 实现群聊+私聊+心跳检测系统 ✈️ Postman测试工具调试接口详细教程【向后端发送Json数据并接收返回的Json结果】 ✈️ Java面向对象 --- 吃货联盟订餐系统(完整版) ✈️ 一分钟教你快速 搭建Vue脚手架(Vue-Cli)项目并整合ElementUI ⛵小结以上就是【Bug 终结者】对Spring Boot 整合Dubbo + Zookeeper 实现分布式 消费者与服务者简单的概述,Spring Boot 项目聚合Dubbo,目前是企业很常用的技术,多多练习,SpringBoot整合Dubbo实现分布式开发不在话下,一些细节之处要注意,细心做事,方可实现目标,从细节出发,不断挑战自己,迎接一个崭新的自己! 如果这篇【文章】有帮助到你,希望可以给【Bug 终结者】点个赞👍,创作不易,如果有对【后端技术】、【前端领域】感兴趣的小可爱,也欢迎关注❤️❤️❤️ 【Bug 终结者】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💝💝💝! |
CopyRight 2018-2019 实验室设备网 版权所有 |