Dubbo 快速掌握 这篇就够了
1. Dubbo概述
Dubbo 是一款高性能、轻量级的开源Java RPC框架,由阿里巴巴公司开发并在2011年开源。它主要用于解决分布式系统中服务之间的通信问题,支持多种协议,如Dubbo、HTTP、Hessian等,具有服务注册、服务发现、负载均衡、故障转移等特性。
2. Zookeeper概述(Dubbo推荐使用Zookeeper作为注册中心)
ZooKeeper 是一个开源的分布式协调服务,主要用于分布式应用中的分布式协调。它是由 Apache 软件基金会开发的一个项目,旨在解决分布式应用中的一致性问题。
3. 安装Zookeeper
创建一个文件夹放置zookeeper压缩文件
使用tar命令进行压缩zookeeper文件
tar -zxvf apache-zookeeper-3.5.6-bin.tar.gz
创建一个目录用于存放zookeeper的数据 例如:zkdata
zoo_sample.cfg不生效,只有zoo.cfg才生效,需要将zoo_sample.cfg拷贝一份名为zoo.cfg的文件
cp zoo_sample.cfg zoo.cfg
然后进入解压后的zookeeper的配置文件zoo.cfg,在该配置文件中修改dataDir的值为存放zookeeper用于存放数据的目录地址(例如:zkdata的地址)

修改zoo.cfg的dataDir:
4. Zookeeper的基本操作
返回zookeeper目录
进入bin目录中,zkServer.sh是zookeeper的可执行文件
启动 zookeeper的命令:
./zkServer.sh start
查看 zookeeper的状态:
./zkServer.sh status
停止 zookeeper的命令:
./zkServer.sh stop

5.Dubbo快速入门示例
首先启动zookeeper
防火墙未关闭问题
如果发现该提示则表示防火墙未关闭

关闭防火墙命令
sudo systemctl stop firewalld
(1)dubbo的生产者:
引入依赖
<dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-dependencies-zookeeper</artifactId><version>2.7.4.1</version><type>pom</type><exclusions><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>2.7.4.1</version></dependency>
填写配置
server:port: 8081
dubbo:registry:address: zookeeper://192.168.92.138:2181 #自己的zookeeper服务器的IP:默认端口号application:name: producer1 #注册进去的名字protocol:name: dubbo #设置类型port: -1 #因为dubbo的服务器端口号是不能唯一的,所以,设置为-1会帮我们自动改变端口号config-center:timeout: 120000 #超时时间 (毫秒)
示例 ServiceImpl
@Service //注意这里是dubbo的Service注解
public class UserServiceImpl implements IUserService {@Overridepublic String helloWorld() {return "Hello World" + LocalDateTime.now();}
}
启动类
@SpringBootApplication
@ServletComponentScan
@EnableDubbo(scanBasePackages = "com.example.service.service")
public class DubboServiceApplication {public static void main(String[] args){SpringApplication.run(DubboServiceApplication.class,args);}
}
(2)dubbo的消费者:
引入依赖
<dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-dependencies-zookeeper</artifactId><version>2.7.4.1</version><type>pom</type><exclusions><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>2.7.4.1</version></dependency><dependency><groupId>com.example</groupId><artifactId>dubbo-service</artifactId><version>1.0-SNAPSHOT</version></dependency>
填写配置
server:port: 8082dubbo:application:name: consumer1protocol:name: dubboport: -1registry:address: zookeeper://192.168.92.138:2181 #默认端口号为2181config-center:timeout: 12000 #超时时间
示例 controller
@RestController
@RequestMapping("/user")
public class UserController {@Referenceprivate IUserService userService;@GetMapping("/hello")public String getHello(){return userService.helloWorld();}}
启动类
@SpringBootApplication
@ServletComponentScan
@EnableDubbo(scanBasePackages = "com.example.web.controller")
public class DubboWebApplication {public static void main(String[] args){SpringApplication.run(DubboWebApplication.class,args);}
}
(3)测试
打开浏览器的地址:http://localhost:8082/user/hello
显示效果:

6.Dubbo-admin(图形化界面)
(1)首先下载node
(2)下载 Dubbo-admin
下载链接:https://github.com/apache/dubbo-admin

下载dubbo-admin 解压后我们进入…\dubbo-admin-develop\dubbo-admin-server\src\main\resources目录,找到 application.properties配置文件 进行配置修改
(3)修改该配置文件中的 zookeeper 地址:
(将127.0.0.01修改为自己的虚拟机地址)
说明:
admin.registry.address注册中心
admin.config-center 配置中心
admin.metadata-report.address元数据中心
(4)在 dubbo-admin-develop 目录执行打包命令
![]()
mvn clean package
(5)启动后端
切换目录到:dubbo-Admin-develop\dubbo-admin-distribution\target
打开cmd
执行下面的命令启动 dubbo-admin,dubbo-admin后台由SpringBoot构建。
java -jar .\dubbo-admin-0.1.jar
(6)启动图形化界面
在dubbo-admin-ui 目录下执行命令
npm run dev
浏览器输入所显示的地址,用户名密码都是root
7.Dubbo高级特性
(1)设置超时和重启
- timeout:调用超时时间,默认值1000,单位为毫秒。
- retries:重试次数,默认值2。


(2)多版本
- version:服务版本,用于区分同一接口的不同版本。
在生产者中的Impl里的@Service和消费者中的controller的@Reffrence的可以通过设置版本,版本必须一致生产者才能为消费者服务。


(3)负载均衡
负载均衡策略有四种:
- random(随机):随机选择一个服务提供者实例。
- roundRobin(轮询):按顺序轮流选择一个服务提供者实例。
- leastRequest(最少请求):选择请求最少的服务提供者实例。
- consistentHash(一致性哈希):基于一致性哈希算法选择服务提供者实例。
在生产者中的Impl里的@Service和消费者中的controller的@Reffrence的可以通过loadbalance属性设置负载均衡策略的模式


(4)集群容错
常见的集群容错模式:
-
failover(失败自动切换):当出现失败情况时,重试其他服务器。通常用于读操作,但重试会带来更长延迟。可通过
retries属性设置重试次数。 -
failfast(快速失败):只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。
-
failback(失败自动恢复):后台记录失败请求,定时重发。通常用于消息通知操作。
-
failsafe(失败安全):出现异常时,直接忽略。通常用于写入审计日志等操作。


相关文章:
Dubbo 快速掌握 这篇就够了
1. Dubbo概述 Dubbo 是一款高性能、轻量级的开源Java RPC框架,由阿里巴巴公司开发并在2011年开源。它主要用于解决分布式系统中服务之间的通信问题,支持多种协议,如Dubbo、HTTP、Hessian等,具有服务注册、服务发现、负载均衡、故…...
【每日刷题】Day100
【每日刷题】Day100 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 【模板】堆_牛客题霸_牛客网 (nowcoder.com) 2. 【模板】链表_牛客题霸_牛客网 (nowcoder.com) 3…...
网络协议九 应用层 HTTPS
一 什么是 HTTPS 二 什么是 SSL/TLS 协议 ,TLS 是 SSL 升级后的名字 三. TLS 协议 工作在那一层 四 。OpenSSL 是 SSL/TLS协议的开源实现。 五。重点 HTTPS 的通讯过程 六 TLS 1.2 的连接过程 1. client hello 是浏览器发送给服务器的第一条信息, 是客户…...
【ArrayList】JDK1.8源码详细注释 以及如何实现线程安全的链表
ArrayList(JDK8) ArrayList有四个内部类,成员内部类Itr,成员内部类ListItr,静态内部类SubList,ArrayListSpliterator(暂时用不到)Itr是Iterator的实现类,支持正向遍历,ArrayList的i…...
[python]rasterio运行代码警告proj_create_from_database: Cannot find proj.db
这个报错要分原因还有rasterio版本讨论,因此官方给出了十分具体回答 Frequently Asked Questions What does "RasterioIOError: file.ecw not recognized as a supported file format." mean? This exception is raised when none of rasterios format …...
ThinkPHP5.1.C+CmsEasy-SQL注入
目录 1、ThinkPHP 中存在的 SQL注入 漏洞( select 方法注入) 1.1环境配置 1.1.1将 composer.json 文件的 require 字段设置成如下: 1.1.2设置application/index/controller/Index.php 文件 1.1.3在 application/database.php 文件中配置…...
Python 绘图进阶之词云图:文本数据的可视化艺术
Python 绘图进阶之词云图:文本数据的可视化艺术 引言 在数据科学和自然语言处理领域,词云图(Word Cloud)是一种常用的可视化工具。它通过直观的图形展示文本数据中的高频词汇,使得我们能够快速抓住文本内容的核心主题…...
【Windows】Q-Dir(资源管理器)软件介绍
软件介绍 Q-Dir是一款免费的文件管理器软件,它可以让您更方便地浏览和管理计算机上的文件和文件夹。与Windows自带的资源管理器相比,Q-Dir具有更多的功能和选项。 安装教程 软件下载完成,解压软件。 点击Q-Dir.exe即可打开软件。 功能…...
什么是令牌桶算法?工作原理是什么?使用它有哪些优点和注意事项?
大家好,我是鸭鸭! 此答案节选自鸭鸭最近弄的面试刷题神器面试鸭 ,更多大厂常问面试题,可以点击下面的小程序进行阅读哈! 目前这个面试刷题小程序刚出,有网页和小程序双端可以使用! 回归面试题…...
C++-类与对象(中上篇)
一、目标 1. 类的 6 个默认成员函数 2. 构造函数 3. 析构函数 二、对目标的介绍 1. 类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生…...
链表 206.反转链表
一般方法 不需要一个个来回换,只需要改变链表的指向,即可完成 一个链表的头节点,也代表了整个链表 class Solution {public ListNode reverseList(ListNode head) {ListNode temp;ListNode cur head;ListNode pre null;while(cur ! null…...
Ubuntu18.04 配置EtherCAT主站IGH SOEM
IGH IGH 是开源的EtherCAT 主站软件 一、安装依赖 sudo apt update sudo apt install build-essential linux-headers-$(uname -r) mercurial autoconf libtool 也不知道安装的完全不完全 uname -r 可以查看内核,我安装的ubuntu18.04的内核版本是 5.4.0-84-gen…...
航空航天构型管理
构型管理(CM)被定义为在产品的生命周期中应用的SE技术和管理规程。CM的五个原则是:CM计划与执行、配置识别、配置变更和差异控制、配置状态核算和配置验证。 广义上的构型管理规划和管理是有效实施配置管理的关键。特别是在不同项目之间的差异中,构型管理…...
Visual Studio Code 安装与 C/C++ 语言运行总结
大家好,我是程序员小羊! 前言: Visual Studio Code(简称 VS Code)是由微软开发的一款轻量级、强大的代码编辑器,支持多种编程语言和开发框架。由于其丰富的插件生态系统和灵活的配置选项,VS…...
Science Robotics 受鳞片启发的可编程机器人结构,可同时进行形状变形和刚度变化
一、前言速览 生物有机体通常凭借复杂的结构表现出显著的多功能性,例如章鱼具有可以同时改变形状和刚度的能力。现有的仿生软体机器人要想实现这样的能力,往往需要繁琐的结构和复杂的控制系统。为此,来自新加坡南洋理工大学的研究人员从覆盖…...
SpringBoot 自定义 Starter 实现
一、定义,什么是Starter SpringBoot Starter 是”一站式服务(one-stop service)“的依赖 Jar 包: 包含 Spring 以及相关技术(比如Redis)的所有依赖提供了自动配置的功能,开箱即用提供了良好的…...
「Spring MVC」Session、Cookie
🎇个人主页:Ice_Sugar_7 🎇所属专栏:JavaEE 🎇欢迎点赞收藏加关注哦! Spring MVC 🍉Session & Cookie🍌联系与区别 🍉获取 Cookie🍉存储 & 获取 Sess…...
Java虚拟机:垃圾回收器
大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 037 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进一步完善自己对整个 Java 技术体系来充实自…...
ES6-ES13学习笔记
初识ES6 ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。 1997年:EC…...
【Qt开发】QtCharts图表——在ui上添加QChartView控件并进行绘图配置
【Qt开发】QtCharts图表——在ui上添加QChartView控件并进行绘图配置 文章目录 控件安装和模块导入在ui上添加QChartView控件QChartView图表配置附录:C语言到C的入门知识点(主要适用于C语言精通到Qt的C开发入门)C语言与C的不同C中写C语言代码…...
Zrlog面试问答及问题解决方案
面试问答 结合 ZrLog 部署(Maven 构建 环境配置 服务部署)的全流程,整理排查 / 运维 / 开发三类高频问题,覆盖场景、原因、解答思路,可直接用于沟通或故障定位: 一、环境准备阶段高频问题 1. 执行 jav…...
Vibe Coding 流程数据化,规则自我进化,让 AI 从错误中自动学习
Vibe Coding 流程数据化,规则自我进化,让 AI 从错误中自动学习 开源工具 AIDA:给 AI 辅助开发加一个数据采集层,让 AI 从错误中自动学习(Glama 3A 认证) 一、痛点:AI 写代码很快,但…...
Linux桌面定制——快速迁移状态栏位置的终端技巧
1. 为什么需要调整状态栏位置 第一次用Unity桌面时,我就被左侧的状态栏搞得浑身难受。作为常年使用Windows的用户,总觉得状态栏就该乖乖待在屏幕底部。后来发现不少Linux新手都有类似的困扰——明明是个高效的操作系统,却因为这种小细节影响使…...
3步接入钉钉机器人:OpenClaw+百川2-13B打造部门问答助手
3步接入钉钉机器人:OpenClaw百川2-13B打造部门问答助手 1. 为什么选择这个组合? 去年我们部门开始尝试用大模型解决内部知识检索问题。最初直接使用网页版对话工具,但遇到三个痛点:一是敏感业务数据不敢上传公有云;二…...
【C++ 多线程实战精讲】std::thread 线程创建 / 传参 / 同步 / 智能指针 / 生命周期管理
前言C11 正式推出了标准多线程库 <thread>,让跨平台多线程开发变得简单高效。但多线程的坑非常多:线程传参、对象生命周期、数据竞争、锁使用、指针悬空、析构崩溃……本文基于完整可运行工程代码,带你彻底掌握:线程创建、j…...
终极指南:Shenyu网关集成Polaris服务治理平台的完整教程
终极指南:Shenyu网关集成Polaris服务治理平台的完整教程 Shenyu网关作为基于Spring Cloud的高性能API网关,与Polaris服务治理平台的集成能够为企业级微服务架构提供强大的流量控制和动态配置能力。本教程将详细讲解如何从零开始配置Shenyu网关与Polaris…...
微信小程序点餐毕业设计开题报告怎么写:从实战需求到技术架构的完整拆解
最近在辅导学弟学妹做毕业设计,发现很多同学在写“微信小程序点餐系统”的开题报告时,都挺头疼的。大家普遍感觉,报告写出来要么是功能列表的堆砌,要么就是技术方案写得特别虚,什么“采用先进技术”、“保证高可用”&a…...
快充时代必备!5款USB保护芯片横评:从PW1502到PW1555怎么选?
快充时代USB保护芯片选型指南:5款主流方案深度解析 在快充技术普及的今天,USB接口的电压规格从传统的5V一路攀升至20V甚至更高。这种变化虽然带来了更快的充电速度,却也埋下了设备损坏的隐患——一个不小心将20V快充头插入仅支持5V的设备&…...
AI智能客服性能测试实战:从零搭建到高并发优化
AI智能客服性能测试实战:从零搭建到高并发优化 最近在负责公司AI智能客服项目的性能保障工作,从零开始搭建了一套完整的性能测试与优化体系。这套系统上线后,业务量增长很快,但在几次营销活动期间,系统出现了明显的性能…...
命令行增强方案:OpenClaw+GLM-4.7-Flash理解自然语言指令
命令行增强方案:OpenClawGLM-4.7-Flash理解自然语言指令 1. 为什么我们需要更智能的命令行 作为一名长期与终端打交道的开发者,我经常陷入这样的困境:记得某个命令的功能,却忘记具体参数;想完成复杂操作,…...

