当前位置: 首页 > news >正文

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框架&#xff0c;由阿里巴巴公司开发并在2011年开源。它主要用于解决分布式系统中服务之间的通信问题&#xff0c;支持多种协议&#xff0c;如Dubbo、HTTP、Hessian等&#xff0c;具有服务注册、服务发现、负载均衡、故…...

【每日刷题】Day100

【每日刷题】Day100 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 【模板】堆_牛客题霸_牛客网 (nowcoder.com) 2. 【模板】链表_牛客题霸_牛客网 (nowcoder.com) 3…...

网络协议九 应用层 HTTPS

一 什么是 HTTPS 二 什么是 SSL/TLS 协议 &#xff0c;TLS 是 SSL 升级后的名字 三. TLS 协议 工作在那一层 四 。OpenSSL 是 SSL/TLS协议的开源实现。 五。重点 HTTPS 的通讯过程 六 TLS 1.2 的连接过程 1. client hello 是浏览器发送给服务器的第一条信息&#xff0c; 是客户…...

【ArrayList】JDK1.8源码详细注释 以及如何实现线程安全的链表

ArrayList(JDK8) ArrayList有四个内部类&#xff0c;成员内部类Itr&#xff0c;成员内部类ListItr&#xff0c;静态内部类SubList&#xff0c;ArrayListSpliterator&#xff08;暂时用不到&#xff09;Itr是Iterator的实现类&#xff0c;支持正向遍历&#xff0c;ArrayList的i…...

[python]rasterio运行代码警告proj_create_from_database: Cannot find proj.db

这个报错要分原因还有rasterio版本讨论&#xff0c;因此官方给出了十分具体回答 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注入 漏洞&#xff08; select 方法注入&#xff09; 1.1环境配置 1.1.1将 composer.json 文件的 require 字段设置成如下&#xff1a; 1.1.2设置application/index/controller/Index.php 文件 1.1.3在 application/database.php 文件中配置…...

Python 绘图进阶之词云图:文本数据的可视化艺术

Python 绘图进阶之词云图&#xff1a;文本数据的可视化艺术 引言 在数据科学和自然语言处理领域&#xff0c;词云图&#xff08;Word Cloud&#xff09;是一种常用的可视化工具。它通过直观的图形展示文本数据中的高频词汇&#xff0c;使得我们能够快速抓住文本内容的核心主题…...

【Windows】Q-Dir(资源管理器)软件介绍

软件介绍 Q-Dir是一款免费的文件管理器软件&#xff0c;它可以让您更方便地浏览和管理计算机上的文件和文件夹。与Windows自带的资源管理器相比&#xff0c;Q-Dir具有更多的功能和选项。 安装教程 软件下载完成&#xff0c;解压软件。 点击Q-Dir.exe即可打开软件。 功能…...

什么是令牌桶算法?工作原理是什么?使用它有哪些优点和注意事项?

大家好&#xff0c;我是鸭鸭&#xff01; 此答案节选自鸭鸭最近弄的面试刷题神器面试鸭 &#xff0c;更多大厂常问面试题&#xff0c;可以点击下面的小程序进行阅读哈&#xff01; 目前这个面试刷题小程序刚出&#xff0c;有网页和小程序双端可以使用&#xff01; 回归面试题…...

C++-类与对象(中上篇)

一、目标 1. 类的 6 个默认成员函数 2. 构造函数 3. 析构函数 二、对目标的介绍 1. 类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生…...

链表 206.反转链表

一般方法 不需要一个个来回换&#xff0c;只需要改变链表的指向&#xff0c;即可完成 一个链表的头节点&#xff0c;也代表了整个链表 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 可以查看内核&#xff0c;我安装的ubuntu18.04的内核版本是 5.4.0-84-gen…...

航空航天构型管理

构型管理(CM)被定义为在产品的生命周期中应用的SE技术和管理规程。CM的五个原则是&#xff1a;CM计划与执行、配置识别、配置变更和差异控制、配置状态核算和配置验证。 广义上的构型管理规划和管理是有效实施配置管理的关键。特别是在不同项目之间的差异中&#xff0c;构型管理…...

Visual Studio Code 安装与 C/C++ 语言运行总结

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言&#xff1a; Visual Studio Code&#xff08;简称 VS Code&#xff09;是由微软开发的一款轻量级、强大的代码编辑器&#xff0c;支持多种编程语言和开发框架。由于其丰富的插件生态系统和灵活的配置选项&#xff0c;VS…...

Science Robotics 受鳞片启发的可编程机器人结构,可同时进行形状变形和刚度变化

一、前言速览 生物有机体通常凭借复杂的结构表现出显著的多功能性&#xff0c;例如章鱼具有可以同时改变形状和刚度的能力。现有的仿生软体机器人要想实现这样的能力&#xff0c;往往需要繁琐的结构和复杂的控制系统。为此&#xff0c;来自新加坡南洋理工大学的研究人员从覆盖…...

SpringBoot 自定义 Starter 实现

一、定义&#xff0c;什么是Starter SpringBoot Starter 是”一站式服务&#xff08;one-stop service&#xff09;“的依赖 Jar 包&#xff1a; 包含 Spring 以及相关技术&#xff08;比如Redis&#xff09;的所有依赖提供了自动配置的功能&#xff0c;开箱即用提供了良好的…...

「Spring MVC」Session、Cookie

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;JavaEE &#x1f387;欢迎点赞收藏加关注哦&#xff01; Spring MVC &#x1f349;Session & Cookie&#x1f34c;联系与区别 &#x1f349;获取 Cookie&#x1f349;存储 & 获取 Sess…...

Java虚拟机:垃圾回收器

大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 037 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进一步完善自己对整个 Java 技术体系来充实自…...

ES6-ES13学习笔记

初识ES6 ECMAScript 6.0&#xff08;以下简称 ES6&#xff09;是 JavaScript 语言的下一代标准&#xff0c;已经在 2015 年 6 月正式发布了。它的目标&#xff0c;是使得 JavaScript 语言可以用来编写复杂的大型应用程序&#xff0c;成为企业级开发语言。 1997年&#xff1a;EC…...

【Qt开发】QtCharts图表——在ui上添加QChartView控件并进行绘图配置

【Qt开发】QtCharts图表——在ui上添加QChartView控件并进行绘图配置 文章目录 控件安装和模块导入在ui上添加QChartView控件QChartView图表配置附录&#xff1a;C语言到C的入门知识点&#xff08;主要适用于C语言精通到Qt的C开发入门&#xff09;C语言与C的不同C中写C语言代码…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing

Muffin 论文 现有方法 CRADLE 和 LEMON&#xff0c;依赖模型推理阶段输出进行差分测试&#xff0c;但在训练阶段是不可行的&#xff0c;因为训练阶段直到最后才有固定输出&#xff0c;中间过程是不断变化的。API 库覆盖低&#xff0c;因为各个 API 都是在各种具体场景下使用。…...

java高级——高阶函数、如何定义一个函数式接口类似stream流的filter

java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用&#xff08;Math::max&#xff09; 2 函数接口…...

深入浅出WebGL:在浏览器中解锁3D世界的魔法钥匙

WebGL&#xff1a;在浏览器中解锁3D世界的魔法钥匙 引言&#xff1a;网页的边界正在消失 在数字化浪潮的推动下&#xff0c;网页早已不再是静态信息的展示窗口。如今&#xff0c;我们可以在浏览器中体验逼真的3D游戏、交互式数据可视化、虚拟实验室&#xff0c;甚至沉浸式的V…...

LeetCode 0386.字典序排数:细心总结条件

【LetMeFly】386.字典序排数&#xff1a;细心总结条件 力扣题目链接&#xff1a;https://leetcode.cn/problems/lexicographical-numbers/ 给你一个整数 n &#xff0c;按字典序返回范围 [1, n] 内所有整数。 你必须设计一个时间复杂度为 O(n) 且使用 O(1) 额外空间的算法。…...