Dubbo 快速入门使用教程

文章目录

  • Dubbo 介绍
  • Dubbo 入门使用
    • 一、Zookeeper 注册中心安装启动
    • 二、服务提供方
    • 三、服务消费方

Dubbo 介绍

dubbo 2.x版本官方文档
参考

Apache Dubbo 是一款 RPC(Remote Procedure Call 远程过程调用)服务开发框架,提供了远程调用方案和服务治理方案。

Dubbo 发展历程

  • 2008年,Dubbo 最初是阿里巴巴内部的一个 RPC 框架,用于解决分布式系统中服务调用的问题。

  • 2017 年:Dubbo 被正式捐献给 Apache 软件基金会并成为 Apache 顶级项目。

  • 2019 年:Apache Dubbo 正式发布了 2.7.0 版本,引入了一些新特性和改进,如异步调用、响应式编程模型、SPI 机制的优化等。

    Dubbo 2.6.x (包名:com.alibaba)版本

    Dubbo 2.7.x (包名:org.apache.dubbo)版本。

Dubbo 架构

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • Provider:暴露服务的服务提供方
  • Consumer:调用远程服务的服务消费方
  • Registry:服务注册与发现的注册中心
  • Monitor:统计服务的调用次数和调用时间的监控中心
  • Container:服务运行容器

调用过程

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

Dubbo 入门使用

文中涉及到的安装包和代码示例,需要的请关注【Qin的学习营地】,回复【dubbo入门使用教程】

一、Zookeeper 注册中心安装启动

这里下载 Zookeeper 3.6.4 版本的并在 windows 下启动。

下载对应安装包后解压,进入 bin 目录,找到 zkServer.cmd。在启动之前,可以打开 zkServer.cmd 文件,在后面添加 pause,可以在出错时不会闪退,方便查看错误原因。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

双击 zkServer.cmd 启动,这里启动会报如下的错,这个错误信息是提示缺少一个 zoo.cfg 文件。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

进入 config 目录下,可以看到有一个 zoo_sample.cfg 文件,这个文件不会生效,需要改成 zoo.cfg,在这里复制一份改为 zoo.cfg 配置文件,重新启动即可生效。 这里顺带配置一下 zoo.cfg 配置文件,配置 dataDir = F:\download,指定数据目录位置。

继续点击 zkServer.cmd 启动,发现还是报错,提示找不到 org.apache.zookeeper.server.quorum.QuorumPeerMain 启动类。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这里主要是因为下载版本的问题,之前下载的是源码版本,现在重新下载二进制版本,启动成功了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

二、服务提供方

使用 spring boot 整合 dubbo 实现。

1、引入依赖

<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>${dubbo.version}</version>
</dependency>

<!--zookeeper 注册中心客户端引入 使用的是curator客户端 -->
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-dependencies-zookeeper</artifactId>
    <version>${dubbo.version}</version>
</dependency>

2、服务提供方实现类

接口:

public interface HelloService {
    String sayHello(String name);
}

实现类:

// @Service: 这是 Dubbo 框架的注解,用于标记一个类为服务提供者。使得 Dubbo 可以自动扫描并将服务发布到注册中心,供消费者发现和调用。
@Service(interfaceClass=HelloService.class , retries=-1, version="1.0.0", timeout=15000)
public class HelloServiceImpl implements HelloService {

    @Override
    public String sayHello(String name) {
        return "【producer】 Hello, " + name + "!";
    }

}

3、配置相关参数

# dubbo-provider.properties
dubbo.application.name=dubbo-provider
## 指定 Dubbo 注册中心的地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
## 指定 Dubbo 服务的协议类型和端口
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
## 指定需要扫描的基础包,用于查找 Dubbo 服务的实现类。
dubbo.scan.base-packages=com.example.dubbo.producer.service

三、服务消费方

使用 spring boot 整合 dubbo 实现。

1、引入依赖

<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>${dubbo.version}</version>
</dependency>

<!--zookeeper 注册中心客户端引入 使用的是curator客户端 -->
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-dependencies-zookeeper</artifactId>
    <version>${dubbo.version}</version>
</dependency>

2、引用服务提供方暴露的接口

使用服务提供方的dubbo接口::

public class ProducerService {
	// @Reference 是 Dubbo 框架中的一个注解,用于在消费者端标记对 Dubbo 服务的引用。
    // Dubbo 框架会自动为该注解标记的字段或方法参数注入代理对象。这个代理对象封装了底层的远程调用逻辑,使得消费者可以像调用本地方法一样调用远程服务。
    @Reference(retries=-1, version="1.0.0", timeout = 15000)
    private HelloService helloService;

    public String consumerSayHello(String name){
        String hello = helloService.sayHello(name);
        System.out.println("[consumer] "+ hello);
        return hello;
    }
}

3、配置相关参数

# dubbo-consumer.properties
dubbo.application.name=dubbo-consumer
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.protocol.name=dubbo
dubbo.protocol.port=30880

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/249986.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ死信队列详解

什么是死信队列 由于特定的**原因导致 Queue 中的某些消息无法被消费&#xff0c;**这类消费异常的数据将会保存在死信队列中防止消息丢失&#xff0c;例如用户在商城下单成功并点击支付后&#xff0c;在指定时间未支付时的订单自动失效死信队列只不过是绑定在死信交换机上的队…

为什么谷歌每年向苹果支付180亿美元“保护费”

在大众印象里&#xff0c;谷歌和苹果似乎处处“水火不容”。 两大科技巨擘在各类产品和服务上竞争&#xff0c;比如操作系统、浏览器、地图、数字助理、手机&#xff0c;数不胜数。但是在这种敌对关系背后&#xff0c;却有着对他们双方都有利的秘密伙伴关系。 你或许不知道&am…

Qt 数据库QSqlDatabase使用记录

记录一些在QT中使用QSqlDatabase操作数据库时&#xff0c;需要注意的地方 创建数据库 bool CDBOperatorAbstract::_openDBConn(CDatabaseConfig config) {QWriteLocker locker(&m_locker);QSqlDatabase db;if(QSqlDatabase::contains(m_connectionName)){db QSqlDatabas…

CloudFlare 优选ip 和 优选域名的获取方法

1.CloudFlare优选IP网站:【链接直达】 2.CloudFlare 优选IP工具&#xff1a;【开源软件】 3.CloudFlare 优选域名&#xff1a;【GitHub开源工具】 4.CF优选域名推荐&#xff1a; time.cloudflare.com shopify.com time.is icook.hk icook.tw ip.sb japan.com malaysia.com rus…

深入学习《大学计算机》系列之第1章 1.2节——问题描述与抽象

一.欢迎来到我的酒馆 第1章 1.2节&#xff0c;问题描述与抽象。 目录 一.欢迎来到我的酒馆二.问题描述、抽象与建模1.什么是抽象2.为什么要抽象3.什么是建模4.建什么模 三.面向计算机的问题分析四.总结 二.问题描述、抽象与建模 什么是抽象&#xff1f;为什么要抽象&#xff1f…

Chrome限制第三方Cookie:未来无法再追踪你看过哪些敏感的“色色”内容了

当我们在浏览网络的时候&#xff0c;常听到「Cookie」这个词&#xff0c;但许多人可能不太清楚它到底是什么。最近&#xff0c;Google 宣布了一项重要更新&#xff0c;Google Chrome 将减少对第三方cookie 的支持&#xff0c;以提高用户隐私保护。 下面我会解释一下这个改变对…

打印机设置发票收据打印

由于各种打印机型号不一样&#xff0c;设置方式打印效果出入也很大&#xff0c;存在打印不全问题&#xff0c;发票右侧小数点后面的数字打印不出来、位置靠上下左右登问题&#xff0c;比较通用的设置方式如下&#xff1a; 首先找到控制面板&#xff0c;找到设备和打印机 进入到…

Aurora8B10B(二) 从手册和仿真学习Aurora8B10B

一. 简介 在上篇文章中&#xff0c;主要结合IP配置界面介绍了一下Aurora8B10B&#xff0c;这篇文章将结合文档来学习一下Aurora8B10B内部的一些细节 和 相关的时序吧。文档主要是参考的是这个 pg046-aurora-8b10b-en-us-11.1 二. Aurora8B10B内部细节 在手册上&#xff0c;对…

弧形导轨的精度等级

为符合工控自动化生产制造必须&#xff0c;弧形导轨在运输武器装备领域应时而生&#xff0c;并已在电子生产制造、手机上、半导体材料、动力锂电池等领域获得广泛运用。其中&#xff0c;弧形导轨的精度等级是评估其运动精度的重要指标&#xff0c;通常包括制造精度和运行精度两…

低代码核心能力详解:简化应用开发的新思路

低代码平台作为一种快速地应用开发解决方法&#xff0c;为中小企业实现数字化转型提供了机会。但是&#xff0c;对于一些刚开始触碰低代码平台的企业来说&#xff0c;了解其核心能力是很重要的。本文将详细分析低代码平台的核心能力&#xff0c;并在挑选低代码平台以前为中小企…

【星环云课堂大数据实验】InceptorSQL使用方法

文章目录 一、InceptorSQL概述二、实验环境三、实验准备四、实验目的五、实验步骤5.1 使用Waterdrop连接Inceptor5.2、WordCount5.3、外部表与内部表5.4、普通ORC表5.5、创建ORC事务表5.6、创建ORC分区表5.7、创建ORC分区分桶表 一、InceptorSQL概述 InceptorSQL是一个**分布式…

数据结构-迷宫问题

文章目录 1、题目描述2、题目分析3、代码实现 1、题目描述 题目链接&#xff1a;迷宫问题 、 注意不能斜着走&#xff01; 2、题目分析 &#xff08;1&#xff09;0为可以走&#xff0c;1不能走且只有唯一一条通路 &#xff08;2&#xff09;我们可以通过判断上下左右来确定…

开酸奶店为何失败,5年创业者和你分享赚钱经验

我是张峻荣&#xff0c;开鲜奶吧已经有 5 年时间了&#xff0c;在自媒体创业板块也是小有名气&#xff0c;经常在网络上分享一些酸奶店的创业知识。今天我要和大家分享的是开酸奶店失败的原因&#xff0c;以及如何赚钱的经验。 5 年前&#xff0c;是我第一次创业失败&#xff…

activiti并行网关执行时每个关联表的变化

activiti并行网关执行时每个关联表的变化 文章目录 &#x1f50a;流程图&#x1f4c6; 通过请假节点&#x1f4d5;通过一个并行节点&#x1f5a5;️再通过一个并行节点&#x1f516;再通过校长任务&#x1f58a;️最后总结 &#x1f50a;流程图 &#x1f4c6; 通过请假节点 &l…

口袋参谋:新品上架,如何获取更多免费流量?

​新品上架 如何获得更多的免费流量&#xff1f; 我相信 这是99.999%的商家&#xff0c;都关心的问题&#xff01; 今天我就来和大家好好说道说道。 01 流量的组成 新品本身是没有权重的&#xff0c;买家搜不到我们。 如果想要获得更多的免费流量&#xff0c;我们就要知道…

千梦网创:逮住一闪而过的机会疯狂摩擦

我这个人平时想的就多&#xff0c;睡觉也在想事情&#xff0c;有时候睡觉里想的事情往往都是很纯粹的、很绝妙的&#xff0c;但是经常性一醒过来就忘了&#xff0c;再去回忆怎么也想不起来了。 灵感只在特定的环境下产生&#xff0c;这类环境是不可再生和模拟的。 机会只因特…

17. 常用类

1.String类 1).什么是字符串? 字符串是由多个字符组成的一串数据(字符序列),字符串可以看成是字符数组. 2).String类的概述 String 类代表字符串。Java 程序中的所有字符串字面值&#xff08;如 “abc” &#xff09;都作为此类的实例实现。 字符串是常量&#xff1b;它们…

connect: Network is unreachable问题解决

第一步&#xff1a;查看ifcfg-ens33配置文件 cd /etc/sysconfig/network-scripts/ cat ifcfg-ens33 发现问题&#xff1a;GATEWAY写错成GATWAY 第二步&#xff1a;修改 vim ifcfg-ens33 第三步&#xff1a;检测是否成功 ping baidu.com 成功&#xff01;

【Unity动画】实现不同的肢体动作自由搭配播放Layer+Avatar Mask

这个教程教你学会使用Unity 动画层配合布偶遮罩&#xff08;AvaterMask&#xff09; 实现从2个动画身上只保留部分肢体动作&#xff0c;然后搭配播放 例如&#xff1a;一个正常跑的动画片段&#xff0c;我只保留腿部动作&#xff0c;形成一个层叫Run_leg 然后在从一个攻击动作…

Java-File类与IO流(2)

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 本…