微服务实战系列之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 {

	@Override
	String 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

在这里插入图片描述

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

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

相关文章

Linux基础知识学习3

vim编辑器 其分为四种模式 1.普通(命令)模式 2.编辑模式 3.底栏模式 4.可视化模式 vim编辑器被称为编辑器之神&#xff0c;而Emacs更是神之编辑器 普通模式&#xff1a; 1.光标移动 ^ 移动到行首 w 跳到下一个单词的开头…

软件开发新手用哪个IDE比较好?软件开发最好的IDE都在这!

目录 IDES 的优点 最佳编程 IDE 列表 Java 开发的流行集成开发环境 JetBrains 的 IntelliJ IDEA NetBeans 适用于 C/ C、C# 编程语言的最佳 IDE Visual Studio 和 Visual Studio 代码 Eclipse PHP 开发的最佳 IDE PHPStorm Sublime Text Atom JavaScript 的顶级 I…

Windows10系统的音频不可用,使用疑难解答后提示【 一个或多个音频服务未运行】

一、问题描述 打开电脑&#xff0c;发现电脑右下角的音频图标显示为X&#xff08;即不可用&#xff0c;无法播放声音&#xff09;&#xff0c;使用音频自带的【声音问题疑难解答】&#xff08;选中音频图标&#xff0c;点击鼠标右键&#xff0c;然后选择“声音问题疑难解答(T)”…

procise纯PL流程点灯记录

procise纯PL流程点灯记录 一、概述 此篇记录使用procise工具构造JFMQL15T 纯PL工程&#xff0c;显示PL_LED闪烁&#xff1b; 硬件说明如下&#xff1a; 时钟引脚 Pl_CLK: U2 ,IO_L14P_T2_SRCC_34 PL_LED1 : E2, IO_L17P_T2_AD5P_35 PL_LED2: D6, IO_L2N_T0_AD8N_35 PL_LED3 :…

网易有道词典不能截屏翻译,不能联网解决办法

对应版本&#xff1a; win10系统&#xff0c;联想拯救者笔记本&#xff0c;网易有道词典8.10.2.0。 网易有道词典免费下载链接&#xff1a;https://download.csdn.net/download/qq_42755734/88684985 修改代理&#xff1a; youdao.com 0 取消勾选---不更新 效果&#xff1a…

CentOS 7 lvm 裸盘的扩容和缩容减盘 —— 筑梦之路

背景介绍 之前写过比较多的关于lvm的文章&#xff1a; CentOS 7 lvm 更换坏盘操作步骤小记 —— 筑梦之路_centos更换硬盘操作-CSDN博客 xfs ext4 结合lvm 扩容、缩容 —— 筑梦之路_ext4扩盘-CSDN博客 LVM逻辑卷元数据丢失恢复案例 —— 筑梦之路_pve lvm数据恢复-CSDN博客…

【MMdetection】MMdetection从入门到进阶

基础环境安装 步骤 0. 从官方网站下载并安装 Miniconda。 步骤 1. 创建并激活一个 conda 环境。 conda create --name openmmlab python3.8 -y conda activate openmmlab步骤 2. 基于 PyTorch 官方说明安装 PyTorch。 pip install torch2.0.1 torchvision0.15.2 torchaudio…

SpringBoot+拦截器(Interceptor)

记录一下SpringBoot的拦截器(Interceptor)使用 拦截器(Interceptor)是AOP面向切面编程的思想来实现的&#xff0c;对于只写代码的来说&#xff0c;具体如何实现不需要多关心&#xff0c;只需要关心如何去使用&#xff0c;会用在那些地方。 当http请求进入Springboot应用程序后…

UE蓝图 RPG动作游戏(一) day15

角色状态制作 制作角色动画混合空间 创建一个动混合空间 添加动作在混合空间 动画蓝图 创建一个动画蓝图 先使用混合空间进行移动&#xff0c;后续优化后再使用状态机 编写垂直水平速度逻辑初始化&#xff0c;获取到此动画的角色组件 获取Horizontal与Vertical的速度逻辑 …

股票价格预测 | Python实现Autoformer, FEDformer和PatchTST等模型用于股价预测

文章目录 效果一览文章概述环境描述源码设计效果一览 文章概述 Autoformer、FEDformer和PatchTST是一些用于时间序列预测,包括股价预测的模型。它们都是在Transformer模型的基础上进行了改进和扩展,以更好地适应时间序列数据的特点。 Autoformer:Autoformer是一种自适应Tran…

软件测试/测试开发丨Python 面向对象编程思想

面向对象是什么 Python 是一门面向对象的语言面向对象编程&#xff08;OOP&#xff09;&#xff1a;Object Oriented Programming 所谓的面向对象&#xff0c;就是在编程的时候尽可能的去模拟真实的现实世界&#xff0c;按照现实世界中的逻辑去处理问题&#xff0c;分析问题中…

继续声明 | 连声明都抄,谁抄袭谁,一目了然,现在竟然恬不知耻的反咬一口。

继续声明 | 连声明都抄&#xff0c;谁抄袭谁&#xff0c;一目了然&#xff0c;现在竟然恬不知耻的反咬一口。 一、本账号为《机器学习之心》博主CSDN唯一官方账号&#xff0c;唯一联系方式见文章底部。 二、《机器学习之心》博主未授权任何第三方账号进行模型合作、程序设计、…

【Java进阶篇】什么是UUID,能不能保证唯一?

什么是UUID&#xff0c;能不能保证唯一? ✔️典型解析✔️优缺点 ✔️各个版本实现✔️V1.基于时间戳的UUID✔️V2.DCE(Distributed Computing Environment)安全的UUID✔️V3.基于名称空间的UUID(MD5)✔️V4.基于随机数的UUID✔️V5.基于名称空间的UUID(SHA1)✔️各个版本总结…

我在Vscode学OpenCV 图像处理四(轮廓查找 cv2.findContours() cv2.drawContours())-- 待补充

图像处理四&#xff08;轮廓查找&#xff09; 一、前言1.1 边缘检测和轮廓查找的区别是什么1.1.1 边缘检测&#xff1a;1.1.2 轮廓查找&#xff1a; 1.2 边缘检测和轮廓查找在图像处理中的关系和流程 二、查找并绘制轮廓2.1 cv2.findContours()&#xff1a;2.1.1 详细介绍&…

爬虫工作量由小到大的思维转变---<第三十章 Scrapy Redis 第一步(配置同步redis)>

前言: 要迈向scrapy-redis进行编写了;首要的一步是,如何让他们互通?也就是让多台电脑连一个任务(这后面会讲); 现在来做一个准备工作,配置好redis的同步!! 针对的是windows版本的redis同步,实现主服务和从服务共享一个redis库; 正文: 正常的redis for windows 的安装这里就…

C#,入门教程(03)——Visual Studio 2022编写彩色Hello World与动画效果

C#&#xff0c;入门教程(01)—— Visual Studio 2022 免费安装的详细图文与动画教程https://blog.csdn.net/beijinghorn/article/details/123350910 C#&#xff0c;入门教程(02)—— Visual Studio 2022开发环境搭建图文教程https://blog.csdn.net/beijinghorn/article/detail…

Hampel滤波器是一种基于中位数的离群值检测方法【异常值检测方法】

Hampel滤波器是一种基于中位数的离群值检测方法&#xff0c;也是一种线性滤波器&#xff0c;由德国数学家和统计学家John Hampel在1974年提出。它主要用于去除信号中的脉冲噪声&#xff0c;具有很强的抗干扰能力&#xff0c;因此被广泛应用于信号处理、通信系统等领域。 1.基本…

SpringBoot定时监听RocketMQ的NameServer

问题分析 自己在测试环境部署了RocketMQ&#xff0c;发现namesrv很容易挂掉&#xff0c;于是就想着监控&#xff0c;挂了就发邮件通知。查看了rocketmq-dashboard项目&#xff0c;发现只能监控Broker&#xff0c;遂放弃这一路径。于是就从报错的日志入手&#xff0c;发现最终可…

【Redis-08】Redis主从复制的实现原理

在Redis中&#xff0c;可以通过slaveof命令或者设置slaveof选项实现两台Redis服务器的主从复制&#xff0c;比如我们有两个Redis机器&#xff0c;地址分别是 127.0.0.1:6379 和 127.0.0.1:6380&#xff0c;现在我们在前者上面执行&#xff1a; 127.0.0.1:6379 > SLAVEOF 12…

STC8H系列单片机入门教程之NVC系列语音播报模块(九)

一、模块简述 ● 模组支持3.3V和5V单片机供电系统 ● 标准2.54MM间距排针与外部连接 ● 支持喇叭0.5W/8欧 ● 适合用于超声波距离、电子秤重量、时钟时间、温度、球赛比分等语音播报 二、引脚说明 序号 名称 说明 1 VCC 电源正&#xff08;3.3V-5V&#…