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

微服务实战系列之Dubbo(下)

前言

眼看着2023即将走远,心里想着似乎还有啥,需要再跟各位盆友叨叨。这不说曹操,曹操就来了。趁着上一篇Dubbo博文的余温尚在,博主兴匆匆地“赶制”了Dubbo的下集,以飨读者。

在这里插入图片描述
上一篇博主依然从Dubbo的内核出发,阐明了它是如何running的。而今天博主继续带着各位盆友,了解如何使用它。鉴于当前Spring+Dubbo组合的流行,本博是基于Spring完成相关介绍。

如需寻一份Dubbo最新的官方源码,请速戳:apache dubbo github sourcecode;
如需查阅最近的中文文档,请速戳:apache dubbo doc;

使用Dubbo

什么是契约?简单讲,可以理解为通信双方必须遵守的约定。既然Dubbo是基于RPC通信完成服务调用,那么服务提供者(P)与服务消费者(C)必须建立在同一个“频率”完成互相握手。

那么在RPC中,或者具体到Dubbo使用过程中,如何建立“契约”?请紧随博主脚步,以防迷路。

1、创建BaseService

一个base api可以作为通信的“契约”,实现P与C的互相通信。

通常,我们在创建BaseService的时候,以接口的形式出现,当然必须符合java的接口设计原则。形如:

public interface MyBaseService {/*** 基础服务* @param input 输入内容*/String doWork(String input) throws ServiceException;
}

2、创建服务提供者(P)

创建BaseService完成后,我们可以创建一个Provider。形如:

@Service("myService")
public class MyBaseServiceImpl implements MyBaseService {@OverrideString doWork(String input) throws ServiceException{return "running:"+input;}
}

定义完成后,我们应该把它发布到服务环境中,怎么发布?

<!--  --><!-- 服务提供应用名称 -->
<dubbo:application name="myservice-provider"/>
<!-- 指定注册中心 -->
<dubbo:registry id="myservice" address="zookeeper://localhost:2181"/>
<!-- 服务发布协议及暴露端口 -->
<dubbo:protocol name="dubbo" port="28080"/>
<!-- 声明需要暴露的服务接口-->
<dubbo:service interface="com.mytest.MyBaseService"ref="myService" timeout="300000" retries="0" loadbalance="roundrobin"/>

其中,dubbo:service几个参数的解释如下:

参数名参数说明
interface提供服务的接口全路径
ref服务提供类,通常是已实现了interface的Bean
timeout超时时间,单位毫秒
retries重试次数,当服务异常时触发
loadbalance负载均衡方式,默认随机

行文至此,我们已经新建了一个Provider,可以通过Spring启动,也可以通过web容器部署。当然部署时,我们可以观察到,每个服务均以dubbo协议发布,服务请求的URL如下所示:

 dubbo://localhost:28080/com.mytest.MyBaseService

当然该URL是基础路径,还包括了dubbo:service中指定的各种参数以及服务的请求方法。

3、创建服务消费者(C)

具备了服务提供者,那么我们可以准备一个服务消费者,用于请求提供者发布的服务。
首先,声明一个服务代理,形如:

<dubbo:reference interface="com.mytest.MyBaseService" id="myBaseService" check="false" loadbalance="roundrobin" retries="0"/>

其中,dubbo:reference 几个参数的解释如下:

参数名参数说明
interface请求服务的接口全路径
id接口唯一ID
check是否开启服务检测
loadbalance负载均衡方式,默认随机

声明完成后,我们可以新建一个class,实现RPC调用。

实际上,我们经常使用的dubbo架构如下图示意。这也是本期介绍的主要内容。

在这里插入图片描述


结语

Dubbo 为开发者提供从项目创建、开发测试,到部署、可视化监测、流量治理,再到生态集成的全套服务。

从这句话可以了解,Dubbo为微服务的开局和繁荣提供了持久的源动力,当然它依然在逐步进化中。博主衷心的希望Dubbo更上一层楼,为微服务继续添砖加瓦。


历史回顾

  • 微服务实战系列之Dubbo(上)
  • 微服务实战系列之ZooKeeper(实践篇)
  • 微服务实战系列之ZooKeeper(下)
  • 微服务实战系列之ZooKeeper(中)
  • 微服务实战系列之ZooKeeper(上)
  • 微服务实战系列之MQ
  • 微服务实战系列之通信
  • 微服务实战系列之J2Cache
  • 微服务实战系列之Cache(技巧篇)
  • 微服务实战系列之MemCache
  • 微服务实战系列之EhCache
  • 微服务实战系列之Redis
  • 微服务实战系列之Cache
  • 微服务实战系列之Nginx(技巧篇)
  • 微服务实战系列之Nginx
  • 微服务实战系列之Feign
  • 微服务实战系列之Sentinel
  • 微服务实战系列之Token
  • 微服务实战系列之Nacos
  • 微服务实战系列之Gateway
  • 微服务实战系列之加密RSA
  • 微服务实战系列之签名Sign

在这里插入图片描述

相关文章:

微服务实战系列之Dubbo(下)

前言 眼看着2023即将走远&#xff0c;心里想着似乎还有啥&#xff0c;需要再跟各位盆友叨叨。这不说曹操&#xff0c;曹操就来了。趁着上一篇Dubbo博文的余温尚在&#xff0c;博主兴匆匆地“赶制”了Dubbo的下集&#xff0c;以飨读者。 上一篇博主依然从Dubbo的内核出发&#…...

《剑指offer》数学第二题:求1+2+3+...+n

题目描述&#xff1a; 求123...n&#xff0c;要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句&#xff08;A?B:C&#xff09;。思路&#xff1a; 我们可以用递归和短路运算符来进行运算&#xff0c;具体代码如下。 代码实现&#xff1a; pac…...

阿里云服务器3M固定带宽速度快吗?

阿里云服务器3M固定带宽是什么意思&#xff1f;速度快吗&#xff1f;3M固定带宽是指云服务器的公网带宽&#xff0c;用于在外网提供服务的&#xff0c;3M带宽的下载速度是384KB/秒&#xff0c;上传速度是1280KB/秒&#xff0c;对于个人博客或流量不多的企业官网速度还是挺快的&…...

美易官方:新年伊始美企狂发450多亿美元债券

新年伊始&#xff0c;美国企业疯狂发行了价值超过450亿美元的债券&#xff0c;创下了历史新高。这一数字比去年同期增长了约50%&#xff0c;凸显出美国企业在全球经济增长放缓的背景下&#xff0c;依然保持着强劲的融资需求和信心。美国企业借款人周三将发行近160亿美元高评级债…...

[云原生] Go web工作流程

web工作流程 Web服务器的工作原理可以简单地归纳为 客户机通过TCP/IP协议建立到服务器的TCP连接客户端向服务器发送HTTP协议请求包&#xff0c;请求服务器里的资源文档服务器向客户机发送HTTP协议应答包&#xff0c;如果请求的资源包含有动态语言的内容&#xff0c;那么服务器…...

【PostgreSQL】约束-主键

【PostgreSQL】约束链接 检查 唯一 主键 外键 排他 主键 主键&#xff08;Primary Key&#xff09;是数据库表中用于唯一标识每一行记录的字段。主键具有以下特点&#xff1a; 唯一性&#xff1a;每个主键值在表中是唯一的&#xff0c;不允许出现重复值。非空性&#xff1a…...

IDEA 控制台中文乱码问题解决方法(UTF-8 编码)

设置 IDEA 编码格式 1&#xff1a;打开 IntelliJ IDEA>File>Setting>Editor>File Encodings&#xff0c;将 Global Encoding、Project Encoding、Default encodeing for properties files 这三项都设置成 UTF-8 2&#xff1a;将 vm option 参数改为&#xff1a; -…...

ssm基于BS的仓库在线管理系统的设计与实现论文

摘 要 如今的时代&#xff0c;是有史以来最好的时代&#xff0c;随着计算机的发展到现在的移动终端的发展&#xff0c;国内目前信息技术已经在世界上遥遥领先&#xff0c;让人们感觉到处于信息大爆炸的社会。信息时代的信息处理肯定不能用之前的手工处理这样的解决方法&#x…...

鸿蒙HarmonyOs:为什么不支持热更新?

学习了一段时间的鸿蒙开发&#xff0c;发现鸿蒙开发还是比较简单的&#xff0c;今天突然心血来潮&#xff0c;研究了一下鸿蒙热更新&#xff0c;最终得出的结论是鸿蒙暂时不支持热更新。 鸿蒙app开发主要是利用的ArkTs语言&#xff0c;ArkTs又是基于TypeScript语言的&#xff0…...

修改 Ubuntu 的配置

目录 一、修改地址 1. 修改本机IP 二、修改网关 1. 查看网关地址 2. 设置默认网关 三、重启网络 1. 重启网络 2. 刷新网络 四、修改主机名 1. 查看主机名 2. 修改主机名 一、修改地址 1. 修改本机IP sudo ifconfig en…...

虹科方案|从困境到突破:TigoLeap方案引领数据采集与优化

导读&#xff1a;在数字化工厂和智能制造的时代&#xff0c;数据已经成为优化机器和流程的关键。然而&#xff0c;如何高效地收集和处理这些数据&#xff0c;特别是在开发、部署和生产阶段&#xff0c;仍是企业面临的一大挑战。虹科TigoLeap平台&#xff0c;作为一款引领行业变…...

【教学类-43-02】20231226 九宫格数独2.0(n=9)(ChatGPT AI对话大师生成 回溯算法)

作品展示&#xff1a; 背景需求&#xff1a; 大4班20号说&#xff1a;我不会做这种&#xff08;九宫格&#xff09;&#xff0c;我做的是小格子的&#xff0c; 他把手工纸翻过来&#xff0c;在反面自己画了矩阵格子。向我展示&#xff1a; “我会做这种&#xff01;” 原来他…...

麒麟Kylin服务器版-破解root密码

一、单用户模式修改root密码 1.重启服务器系统后&#xff0c;将光标移动到第二项&#xff0c;按【e】键进入用户登录页面。 2.在【username】下方所在行输入root名称&#xff0c;【password】下方所在行输入密码Kylin123123后&#xff0c;进入编辑模式。代码如下&#xff1a; …...

cnPuTTY 0.80.0.1—PuTTY Release 0.80中文版本简单说明~~

2023-12-18 官方发布了PuTTY 0.80本次发布主要是针对Terrapin攻击(CVE-2023-48795)的修改发布。 更多详细的内容请查看PuTTY Change Log。 有关Terrapin攻击可用简单参考&#xff1a;警告&#xff01;&#xff01;&#xff01;Terrapin攻击(CVE-2023-48795)~~~ 为了缓解此漏洞…...

向爬虫而生---Redis 拓宽篇1 < pipeline传输效率>

前言: 都知道,Redis是一款高效的内存数据库;每条命令都能很快响应,但是如果我们把服务器布在网络上,每次一个命令来回传送也是需要花费时间的; pipeline传输技术则是进一步提高Redis的性能和传输效率的一种方法。 正文: pipeline与普通命令发送方式的区别 Pipeline是一种机制&…...

Unity Hub 无法激活许可证

烦死了~ &#x1f635;‍&#x1f4ab; 卸载UnityHub, 安装旧版本&#x1f448;激活许可证&#xff0c; 如果出现旧版本无法识别Editor的情况需要卸载了再装最新版本的UnityHub...

数据分析求职-如何准备

今天咱们来聊一聊数据分析岗位求职到底需要准备什么&#xff1f;什么时间准备&#xff1f;该如何准备&#xff1f; 1. 求职时间轴 上图很清楚地把求职时间轴展示出来了&#xff0c;重复的话也不多说了&#xff0c;有两点想和同学们重点提下&#xff1a; 1&#xff09;一定一定…...

新手能掌握 PyTorch 的填充技术:深入理解反射、复制、零值和常数填充

目录 torch.nn子模块详解 nn.ReflectionPad1d 参数说明&#xff1a; 形状&#xff08;Shape&#xff09;&#xff1a; 使用示例&#xff1a; 注意事项&#xff1a; nn.ReflectionPad2d 参数说明&#xff1a; 形状&#xff08;Shape&#xff09;&#xff1a; 使用示例…...

地震烈度速报与预警工程成功案例的经验分享 | TDengine 技术培训班第一期成功落地

近日&#xff0c;涛思数据在成都开设了“国家地震烈度速报与预警工程数据库 TDengine、消息中间件 TMQ 技术培训班”&#xff0c;这次培训活动共分为三期&#xff0c;而本次活动是第一期。其目标是帮助参与者深入了解 TDengine 和 TMQ 的技术特点和应用场景&#xff0c;并学习如…...

集群部署篇--Redis 集群动态伸缩

文章目录 前言一、redis 节点的添加1.1 redis 的实例部署&#xff1a;1.2 redis 节点添加&#xff1a;1.3 槽位分配&#xff1a;1.4 添加从节点&#xff1a; 二、redis 节点的减少2.1 移除主节点2.1.1 迁移槽位2.1.1 删除节点&#xff1a; 三、redis 删除节点的重新加入3.1 加入…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...

4. TypeScript 类型推断与类型组合

一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式&#xff0c;自动确定它们的类型。 这一特性减少了显式类型注解的需要&#xff0c;在保持类型安全的同时简化了代码。通过分析上下文和初始值&#xff0c;TypeSc…...