【Dubbo+Zookeeper】——SpringBoot+Dubbo+Zookeeper知识整合

news/2025/2/21 8:03:40

🎼个人主页:【Y小夜】

😎作者简介:一位双非学校的大二学生,编程爱好者,

专注于基础和实战分享,欢迎私信咨询!

🎆入门专栏:🎇【MySQL,Java基础,Rust】

🎈热门专栏:🎊【Python,Javaweb,Vue框架】

感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持!❤️

目录

🎯分布式理论

🎃分布式系统

🎃Dubbo框架

🎃单一应用架构

🎃垂直应用架构

🎃分布式服务架构

🎃流动计算架构

🎯什么是RPC?

🎃RPC基本原理

🎯Dubbo

dubbo%EF%BC%9F-toc" style="margin-left:40px">🎃什么是dubbo

dubbo%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B5-toc" style="margin-left:80px">✨dubbo基本概念

✨调用关系说明

zookeeper-toc" style="margin-left:40px">🎃window下安装zookeeper

zookeeper-toc" style="margin-left:0px">🎯SpringBoot + Dubbo + zookeeper

🎃框架搭建

🎃服务提供者

🎃消费者

5. 测试类编写;


🎯分布式理论

🎃分布式系统

分布式系统是若干独立计算机的集合,这些计算机对 于用户来说就像单个相关系统

        分布式系统(distributed system)是建立在网络之上的软件系统。

        首先需要明确的是,只有当单个节点的处理能力无法满足日益增长的计算、存储任务的时候,且硬件的 提升(加内存、加磁盘、使用更好的CPU)高昂到得不偿失的时候,应用程序也不能进一步优化的时 候,我们才需要考虑分布式系统。因为,分布式系统要解决的问题本身就是和单机系统一样的,而由于 分布式系统多节点、通过网络通信的拓扑结构,会引入很多单机系统没有的问题,为了解决这些问题又 会引入更多的机制、协议,带来更多的问题。

🎃Dubbo框架

        随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及 流动计算架构势在必行,急需一个治理系统确保架构有条不紊的演进。

🎃单一应用架构

        当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。

        适用于小型网站,小型管理系统,将所有功能都部署到一个功能里,简单易用。 

缺点:

  • 1、性能扩展比较难
  • 2、协同开发问题
  • 3、不利于升级维护

🎃垂直应用架构

        当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提 升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键

        通过切分业务来实现各个模块独立部署,降低了维护和部署的难度,团队各司其职更易管理,性能扩展 也更方便,更有针对性。

缺点: 公用模块无法重复利用,开发性的浪费

🎃分布式服务架构

        当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定 的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。

🎃流动计算架构

        当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问 压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心**(SOA)[ Service Oriented Architecture]是关键**

🎯什么是RPC?

        RPC【Remote Procedure Call】是指远程过程调用,是一种进程间通信方式,他是一种技术的思想,而 不是规范。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用 程序员显式编码这个远程调用的细节。即程序员无论是调用本地的还是远程的函数,本质上编写的调用 代码基本相同。        

        也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由 于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。为什么要用 RPC呢?就是无法在一个进程内,甚至一个计算机内通过本地调用的方式完成的需求,比如不同的系统 间的通讯,甚至不同的组织间的通讯,由于计算能力需要横向扩展,需要在多台机器组成的集群上部署 应用。RPC就是要像调用本地的函数一样去调远程函数;

🎃RPC基本原理

🎯Dubbo

dubbo%EF%BC%9F">🎃什么是dubbo

Apache Dubbo |ˈdʌbəʊ| 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向 接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现

dubbo%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B5">✨dubbo基本概念

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

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

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

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

✨调用关系说明

l 服务容器负责启动,加载,运行服务提供者。 l 服务提供者在启动时,向注册中心注册自己提供的服务。

l 服务消费者在启动时,向注册中心订阅自己所需的服务。

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

l 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再 选另一台调用。

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

zookeeper">🎃window下安装zookeeper

1、下载zookeeper

2、运行/bin/zkServer.cmd ,初次运行会报错,没有zoo.cfg配置文件;

可能遇到问题:闪退 !

解决方案:编辑zkServer.cmd文件末尾添加 pause 。这样运行出错就不会退出,会提示错误信息, 方便找到原因

3、修改zoo.cfg配置文件 将conf文件夹下面的zoo_sample.cfg复制一份改名为zoo.cfg即可

注意几个重要位置: dataDir=./ 临时数据存储的目录(可写相对路径) clientPort=2181 zookeeper的端口号 修改完成后再次启动zookeeper

 4、使用zkCli.cmd测试 ls /:列出zookeeper根下保存的所有节点

[zk: 127.0.0.1:2181(CONNECTED) 4] ls /
 [zookeeper]

create –e /kuangshen 123:创建一个kuangshen节点,值为123

get /kuangshen:获取/kuangshen节点的值

再来查看一下节点

zookeeper">🎯SpringBoot + Dubbo + zookeeper

🎃框架搭建

1. 启动zookeeper

2. IDEA创建一个空项目;

3.创建一个模块,实现服务提供者:provider-server , 选择web依赖即可

4.项目创建完毕,我们写一个服务,比如卖票的服务;

5.创建一个模块,实现服务消费者:consumer-server , 选择web依赖即可

6.项目创建完毕,我们写一个服务,比如用户的服务;

🎃服务提供者

1、将服务提供者注册到注册中心,我们需要整合Dubbo和zookeeper,所以需要导包 我们从dubbo官网进入github,看下方的帮助文档,找到dubbo-springboot,找到依赖包

<!-- Dubbo Spring Boot Starter -->
 <dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>2.7.3</version>
 </dependency>    

2、在springboot配置文件中配置dubbo相关属性

#当前应用名字
dubbo.application.name=provider-server
 #注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
 #扫描指定包下服务
dubbo.scan.base-packages=com.kuang.provider.service

3.在service的实现类中配置服务注解,发布服务!注意导包问题

import org.apache.dubbo.config.annotation.Service;
 import org.springframework.stereotype.Component;
 @Service //将服务发布出去
@Component //放在容器中
public class TicketServiceImpl implements TicketService {
    @Override
    public String getTicket() {
        return "aaqa";
    }
 }

🎃消费者

1、导入依赖,和之前的依赖一样;

配置参数

#当前应用名字
dubbo.application.name=consumer-server
 #注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181

3. 本来正常步骤是需要将服务提供者的接口打包,然后用pom文件导入,我们这里使用简单的方式,直 接将服务的接口拿过来,路径必须保证正确,即和服务提供者相同;

4.完善消费者的服务类

package com.kuang.consumer.service;
 import com.kuang.provider.service.TicketService;
 import org.apache.dubbo.config.annotation.Reference;
 import org.springframework.stereotype.Service;
 @Service //注入到容器中
public class UserService {
    @Reference //远程引用指定的服务,他会按照全类名进行匹配,看谁给注册中心注册了这个全
类名
    TicketService ticketService;
    public void bugTicket(){
        String ticket = ticketService.getTicket();
        System.out.println("在注册中心买到"+ticket);
    }
 }

5. 测试类编写;

@RunWith(SpringRunner.class)
 @SpringBootTest
 public class ConsumerServerApplicationTests {
    @Autowired
    UserService userService;
    @Test
    public void contextLoads() {
        userService.bugTicket();
    }
 }


http://www.niftyadmin.cn/n/5860505.html

相关文章

scrapy pipelines过滤重复数据

scrapy pipelines过滤重复数据 方法 1&#xff1a;基于内存的简单去重&#xff08;适合小规模数据&#xff09;方法 2&#xff1a;基于持久化存储去重&#xff08;适合大规模数据/重启恢复&#xff09;方法 3&#xff1a;使用 Scrapy 内置的 dupefilter&#xff08;针对请求去重…

硬件岗位是否适合你?

在当今科技飞速发展的时代,硬件行业作为技术创新的基石,始终扮演着至关重要的角色。无论是智能手机、自动驾驶汽车,还是人工智能服务器,硬件都是这些技术的核心支撑。然而,硬件岗位是否适合你?作为一名硬件专家,我将从多个角度为你分析,帮助你判断自己是否适合从事硬件…

react实例与总结(二)

目录 一、脚手架基础语法(16~17) 1.1、hello react 1.2、组件样式隔离(样式模块化) 1.3、react插件 二、React Router v5 2.1、react-router-dom相关API 2.1.1、内置组件 2.1.1.1、BrowserRouter 2.1.1.2、HashRouter 2.1.1.3、Route 2.1.1.4、Redirect 2.1.1.5、L…

IC卡、M1卡及各类卡的原理使用说明

1. M1卡 1.1 M1卡说明 请参考&#xff1a;https://blog.csdn.net/dancehole/article/details/126868829 1.2 M1卡测试 M1卡的0扇区是只读扇区&#xff0c;我们可以测试下读写&#xff0c;我们向0扇区写入数据&#xff0c;返回失败&#xff0c;读取数据&#xff0c;数据如下…

详解Nginx 配置

一、Nginx 介绍 Nginx 是一款轻量级的 Web 服务器 / 反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器。它由俄罗斯的程序设计师 Igor Sysoev 所开发&#xff0c;自 2004 年发布以来&#xff0c;凭借其高性能、低内存消耗、高并发处理能力等特点&#xf…

k8s ssl 漏洞修复

针对Kubernetes集群中SSL/TLS协议信息泄露漏洞&#xff08;CVE-2016-2183&#xff09;的修复&#xff0c;需重点修改涉及弱加密算法的组件配置。以下是具体修复步骤及验证方法&#xff1a; 一、漏洞修复步骤 1. 修复etcd服务 修改配置文件 &#xff1a; 编辑 /etc/kubernetes/…

爱普生 SG-8101CE 可编程晶振在笔记本电脑的应用

在笔记本电脑的精密架构中&#xff0c;每一个微小的元件都如同精密仪器中的齿轮&#xff0c;虽小却对整体性能起着关键作用。如今的笔记本电脑早已不再局限于简单的办公用途&#xff0c;其功能愈发丰富多样。从日常轻松的文字处理、网页浏览&#xff0c;到专业领域中对图形处理…

Android 11.0 WiFi连接默认设置静态IP地址功能实现

1.前言 在11.0的系统rom定制化开发中,在定制化某些功能开发中,在wifi模块中,有产品需要要求设置wifi静态ip功能,而系统中wifi连接 后ip是动态的,每次开机后 连接wifi的ip就是不固定的,所以产品需要采用固定ip,就需要实现静态ip功能 2.WiFi连接默认设置静态IP地址功能实…