Spring Boot 整合Dubbo + Zookeeper 实现分布式 消费者与服务者的业务调用

本文主要是介绍Spring Boot 整合Dubbo + Zookeeper 实现分布式 消费者与服务者的业务调用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

📢📢📢📣📣📣

哈喽!大家好,我是【Bug 终结者,【CSDN新星创作者】🏆,阿里云技术博主🏆,51CTO人气博主🏆,INfoQ写作专家🏆

一位上进心十足,拥有极强学习力的【Java领域博主】😜😜😜

🏅【Bug 终结者】博客的领域是【面向后端技术】的学习,未来会持续更新更多的【后端技术】以及【学习心得】。 偶尔会分享些前端基础知识,会更新实战项目,面向企业级开发应用
🏅 如果有对【后端技术】、【前端领域】感兴趣的【小可爱】,欢迎关注【Bug 终结者】💞💞💞


❤️❤️❤️ 感谢各位大可爱小可爱! ❤️❤️❤️

文章目录

  • 一、什么是Dubbo?
    • ☁️基本概念
    • ❄️Dubbo的服务提供者与服务消费者的调用关系
  • 二、什么是RPC?
    • ☎️RPC基本原理
  • 三、Dubbo的特点及好处
  • 四、Zookeeper是什么?
  • 五、搭建Zookeeper注册中心
    • ♻️安装Zookeeper
    • ✅启动Zookeeper
  • 六、搭建Dubbo管理控制台
    • ✒️克隆dubbo-admin 项目
    • ✅运行dubbo-admin
      • ♨️部署dubbo-admin-server
      • ♨️部署dubbo-admin-ui
    • Ⓜ️进入Dubbo管理控制台
    • ✈️踩坑记录
  • 七、SpringBoot 整合Dubbo + Zookeeper
    • ✉️项目简介
    • ♻️项目结构图
    • ⏰效果图
    • ✴️核心源码
      • 🚃父级工程 dubbo-boot
      • 🚃公共API模块 GmallPublicInterface
      • 🚃服务提供者模块 UserServiceProvider
      • 🚃服务消费者模块 OrderServiceConsumer
    • 📜代码下载
  • ♨️往期精彩热文回顾
  • ⛵小结

一、什么是Dubbo?

Dubbo是阿里出品的分布式开源服务框架,阿里已交予Apache开源组织基金会

Apache Dubbo 是一款高性能轻量级开源RPC服务框架

Dubbo官网

☁️基本概念

在这里插入图片描述

服务提供者(Provider):暴露服务的服务提供方,服务提供者在启动时,向注册中心注册自己提供的服务。

服务消费者(Consumer): 调用远程服务的服务消费方,服务消费者在启动时,向注册中心订阅自己所需的服务,服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

注册中心(Registry):注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者

监控中心(Monitor):服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心

❄️Dubbo的服务提供者与服务消费者的调用关系

  1. 服务容器启动,加载,运行服务提供者
  2. 服务提供者在启动时,向注册中心注册自己提供的服务
  3. 服务消费者在启动时,向注册中心订阅自己需要的服务
  4. 注册中心返回服务提供者地址列表给服务消费者,如果有变更,注册中心将基于长连接推送变更数据给服务消费者
  5. 服务消费者,从服务提供者地址列表中,基于软负载均衡算法,选一台服务提供者进行调用,如果调用失败,再选另一台调用
  6. 服务消费者和服务提供者,再内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心

二、什么是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

将下载的文件解压缩

在这里插入图片描述

✅启动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-admin

dubbo-admin采用前后端分离的形式管理项目

爬取文件如下

在这里插入图片描述

♨️部署dubbo-admin-server

运行后端项目必须启动 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

启动成功

在这里插入图片描述

Ⓜ️进入Dubbo管理控制台

访问前端生成的本地地址

在这里插入图片描述

默认用户名密码均为root

输入即可登录成功

在这里插入图片描述

✈️踩坑记录

后端的地址必须和前端工程vue.config.js下的target路径一样,否则404!

在这里插入图片描述

七、SpringBoot 整合Dubbo + Zookeeper

✉️项目简介

基于SpringBoot项目整合Dubbo + Zookeeper 实现消费者消费服务提供者的服务

消费者为订单模块,传入用户id去查询用户模块的用户信息,实现远程RPC调用服务,分布式调用,而不是单体架构

服务提供者为用户模块,返回用户信息

♻️项目结构图

在这里插入图片描述

  1. 父工程:dubbo-boot
  2. 公共API(接口及实体类):GmallPublicInterafce
  3. 服务提供者:UserServiceProvider
  4. 服务消费者:OrderServiceConsumer

⏰效果图

在这里插入图片描述

✴️核心源码

🚃父级工程 dubbo-boot

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!-- 整体引入springboot工程 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.5</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>org.example</groupId><artifactId>dubbo-boot</artifactId><packaging>pom</packaging><version>1.0-SNAPSHOT</version><!-- 子模块 --><modules><module>GmallPublicInterface</module><module>UserServiceProvider</module><module>OrderServiceConsumer</module></modules><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties></project>

🚃公共API模块 GmallPublicInterface

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>dubbo-boot</artifactId><groupId>org.example</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>GmallPublicInterface</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><!-- 引入dubbo --><!-- https://mvnrepository.com/artifact/com.alibaba/dubbo --><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>2.6.2</version></dependency><!-- 注册中心使用的是zookeeper,引入操作zookeeper的客户端 --><dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</artifactId><version>2.12.0</version></dependency><dependency><groupId>com.alibaba.boot</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>0.2.0</version></dependency></dependencies></project>

还有一些核心的接口及实体类

🚃服务提供者模块 UserServiceProvider

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>dubbo-boot</artifactId><groupId>org.example</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>UserServiceProvider</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>org.example</groupId><artifactId>GmallPublicInterface</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes><filtering>false</filtering></resource><resource><directory>src/main/resources</directory></resource><resource><directory>libs/</directory><targetPath>libs</targetPath><includes><include>**/*.jar</include></includes></resource></resources></build></project>

application.yml

# 配置端口号
server:port: 8084
# 配置Dubbo
dubbo:application:name: UserServiceProviderregistry:address: zookeeper://127.0.0.1:2181protocol:name: dubboport: 20881monitor:protocol: registryconsumer: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 {@Overridepublic List<UserAddress> getUserAddressList(String userId) {System.out.println("UserServiceImpl.....old...");// TODO Auto-generated method stubUserAddress address1 = new UserAddress(1, "北京市朝阳区", "1", "Bug 终结者", "010-5625321", "Y");UserAddress address2 = new UserAddress(2, "北京市海淀区", "1", "小王", "010-66253834", "N");return Arrays.asList(address1,address2);}}

🚃服务消费者模块 OrderServiceConsumer

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>dubbo-boot</artifactId><groupId>org.example</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>OrderServiceConsumer</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>org.example</groupId><artifactId>GmallPublicInterface</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes><filtering>false</filtering></resource><resource><directory>src/main/resources</directory></resource><resource><directory>libs/</directory><targetPath>libs</targetPath><includes><include>**/*.jar</include></includes></resource></resources></build></project>

application.yml

# 配置端口
server:port: 8085# 配置Dubbo
dubbo:application:name: OrderServiceConsumerregistry:address: zookeeper://127.0.0.1:2181monitor:protocol: registryconsumer: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 {@ReferenceUserService userService;@Overridepublic List<UserAddress> initOrder(String userId) {//1. 查询用户的收货地址List<UserAddress> 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 终结者】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💝💝💝!

这篇关于Spring Boot 整合Dubbo + Zookeeper 实现分布式 消费者与服务者的业务调用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/212493

相关文章

Flutter实现文字镂空效果的详细步骤

《Flutter实现文字镂空效果的详细步骤》:本文主要介绍如何使用Flutter实现文字镂空效果,包括创建基础应用结构、实现自定义绘制器、构建UI界面以及实现颜色选择按钮等步骤,并详细解析了混合模... 目录引言实现原理开始实现步骤1:创建基础应用结构步骤2:创建主屏幕步骤3:实现自定义绘制器步骤4:构建U

SpringBoot中四种AOP实战应用场景及代码实现

《SpringBoot中四种AOP实战应用场景及代码实现》面向切面编程(AOP)是Spring框架的核心功能之一,它通过预编译和运行期动态代理实现程序功能的统一维护,在SpringBoot应用中,AO... 目录引言场景一:日志记录与性能监控业务需求实现方案使用示例扩展:MDC实现请求跟踪场景二:权限控制与

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel

Java NoClassDefFoundError运行时错误分析解决

《JavaNoClassDefFoundError运行时错误分析解决》在Java开发中,NoClassDefFoundError是一种常见的运行时错误,它通常表明Java虚拟机在尝试加载一个类时未能... 目录前言一、问题分析二、报错原因三、解决思路检查类路径配置检查依赖库检查类文件调试类加载器问题四、常见

Java注解之超越Javadoc的元数据利器详解

《Java注解之超越Javadoc的元数据利器详解》本文将深入探讨Java注解的定义、类型、内置注解、自定义注解、保留策略、实际应用场景及最佳实践,无论是初学者还是资深开发者,都能通过本文了解如何利用... 目录什么是注解?注解的类型内置注编程解自定义注解注解的保留策略实际用例最佳实践总结在 Java 编程

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

Java 实用工具类Spring 的 AnnotationUtils详解

《Java实用工具类Spring的AnnotationUtils详解》Spring框架提供了一个强大的注解工具类org.springframework.core.annotation.Annot... 目录前言一、AnnotationUtils 的常用方法二、常见应用场景三、与 JDK 原生注解 API 的

Java controller接口出入参时间序列化转换操作方法(两种)

《Javacontroller接口出入参时间序列化转换操作方法(两种)》:本文主要介绍Javacontroller接口出入参时间序列化转换操作方法,本文给大家列举两种简单方法,感兴趣的朋友一起看... 目录方式一、使用注解方式二、统一配置场景:在controller编写的接口,在前后端交互过程中一般都会涉及

Java中的StringBuilder之如何高效构建字符串

《Java中的StringBuilder之如何高效构建字符串》本文将深入浅出地介绍StringBuilder的使用方法、性能优势以及相关字符串处理技术,结合代码示例帮助读者更好地理解和应用,希望对大家... 目录关键点什么是 StringBuilder?为什么需要 StringBuilder?如何使用 St

Python实现微信自动锁定工具

《Python实现微信自动锁定工具》在数字化办公时代,微信已成为职场沟通的重要工具,但临时离开时忘记锁屏可能导致敏感信息泄露,下面我们就来看看如何使用Python打造一个微信自动锁定工具吧... 目录引言:当微信隐私遇到自动化守护效果展示核心功能全景图技术亮点深度解析1. 无操作检测引擎2. 微信路径智能获