Dubbo入门直接上手,结合微服务详解

Dubbo

高性能、轻量级的 Java RPC 框架

RPC: Remote Procedure Call 远程过程调用,简单来说就是它允许一个计算机程序通过网络请求调用另一个计算机上的程序,就像本地调用一样。有非常多的协议和技术来都实现了RPC的过程,比如:HTTP REST风格,Java RMI规范、WebService SOAP协议、Hession等等。

Dubbo架构

在这里插入图片描述

节点角色说明:

Provider:暴露服务的服务提供者 (就是你每个大功能类单独一个模块)

Container:服务运行容器

Consumer:调用远程服务的服务消费者 (这里一般是web或者网关gateway)

Registry:服务注册与发现的注册中心

Monitor:统计服务的调用次数和调用时间的监控中心

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

Dubbo实用

你需要有服务提供者模块和服务消费者模块

1.首先需要一个可用的注册中心 Zookeeper,Nacos,Redis 均可。(这里使用Nacos)

2.新建一个maven工程,添加如下依赖

		<!-- registry dependency -->
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>${nacos.version}</version>
        </dependency>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

3.你需要给服务提供者模块和服务消费者模块提供对应的配置,这样才能实现去注册中心注册和调用服务。对应着每个模块来设置,不过记得注册中心地址要填同一个;要不然怎么去找服务。

# 提供者
dubbo:
  application:
    name: provider
  protocol:
    name: dubbo
    port: -1
  # 注册中心  
  registry:
    address: nacos://your.nacos.address:8848
    username: nacos
    password: nacos

其实,可以这样理解:

  • 网关 = 服务消费者
  • 其他的功能模块 = 服务提供者

消费者调用提供者的服务,比如登录功能:

网关(消费者)写一个登录接口,然后使用 @DubboReference 就可以实现远程注入,即可像调用本地方法一样调用远程服务了。代替以前的@autowired

@DubboReference(interfaceClass = UserService.class)
    private UserService userService;

登录模块UserCenter(提供者)写一个UserServiceImpl类,来进行登陆的逻辑代码编写。实现类可以通过@DubboService(interfaceClass = UserService.class) :使用@DubboService 注解,Dubbo会将对应的服务注册到spring, 在spring启动后调用对应的服务导出方法,将服务注册到注册中心, 这样Consumer端才能发现我们发布的服务并调用。其实也就等同于以前的@Service

@DubboService(interfaceClass = UserService.class)
public class UserServiceImpl implements UserService { 
}

​ 而因为会有很多个功能模块,这样子大家可能也注意到了一个问题。就是需要在两个模块都写一个service接口类,这样子的话,以后假如进行功能的添加或者修改啥的,两边都需要进行更改;很多时候不一定能统一,毕竟以后出去工作可能是一个团队一个模块。所以这个时候,我们可以添加一个公共的模块,专门用来存放服务接口的。

这里通过Maven导入即可:在消费者和提供者的POM中都导入公共模块;这样就可以解决这个问题了。

与之类似的还有一个是Java对象的传输,定义一个公共的对象模块;然后让提供者和消费者都去导入其模块即可。当然这个可以利用到Maven的传递性;你让公共服务模块导入公共对象模块,这样就可以无缝衔接了。不过对象的传输需要多注意一点,对象需要实现序列化接口 implements Serializable。dubbo 内部已经将序列化和反序列化的过程内部封装了。

这样的模块还有很多,工具模块也是;这些看你怎么搭建底层了。

这里提醒一下:

记得启动模块的时候,先启动提供者(提供者无先后顺序要求),最后在启动消费者。毕竟服务提供者在启动时,要向注册中心注册自己提供的服务。服务消费者在启动时,向注册中心订阅自己所需的服务。然后是会有缓存机制的,就是它会将提供者的服务缓存在消费者的本地;所以你也可以不用每次都运行提供者。但是代码改动时,就需要启动,再次进行注册。

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

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

相关文章

第二课:布尔逻辑与逻辑门、二进制及算术逻辑单元

第二课&#xff1a;布尔逻辑与逻辑门、二进制及算术逻辑单元 第三章&#xff1a;布尔逻辑与逻辑门1、计算机为什么使用二进制2、布尔代数&布尔代数在计算机中的实现1&#xff09;NOT 操作2&#xff09;AND 操作3&#xff09;OR 操作 3、特殊的逻辑运算——异或4、逻辑门的符…

【Python】ubuntu python>3.9编译安装,及多个Python版本并存的使用方法

【Python】ubuntu python3.9编译安装&#xff0c;及多个Python版本并存的使用方法 1. 安装依赖2. 编译与安装2.1 依赖与源获取2.2 配置2.3 编译2.4 安装2.5 链接动态库 1. 安装依赖 更新系统软件 在正式开始之前&#xff0c;建议首先检查系统软件是否均为最新&#xff0c;并更…

处理urllib.request.urlopen报错UnicodeEncodeError:‘ascii‘

参考&#xff1a;[Python3填坑之旅]一urllib模块网页爬虫访问中文网址出错 目录 一、报错内容 二、报错截图 三、解决方法 四、实例代码 五、运行截图 六、其他UnicodeEncodeError: ascii codec 问题 一、报错内容 UnicodeEncodeError: ascii codec cant encode charac…

IDEA2023创建web项目

一、新建项目 点击File->New->Project...&#xff0c;如果是第一次创建项目则单击New Project 二、添加Web Application 建好的样子 把web移动到main目录下同时改名为webapp 三、不存在Add Framework Support添加Web Application 如何存在Add Framework Support&#…

Java - 工厂设计模式

Java - 工厂设计模式 一. 简介二. 例子2.1 定义抽象类2.2 定义子类2.3 创建工厂2.4 测试 三. JDK中使用工厂模式的案例 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在歌唱 工厂设计模式…

分享11 种有用的 JavaScript 技巧

今天这篇文章&#xff0c;我想与你分享 11个有用的JavaScript实用小技巧&#xff0c;它们将极大地提高你的工作效率。 1.生成随机颜色的两种方式 1&#xff09;.生成RandomHexColor const generateRandomHexColor () > {return #${Math.floor(Math.random() * 0xffffff)…

keras 人工智能之VGGNet神经网络的图片识别

VGG16结构图 上期文章我们分享了如何使用VGGNet CNN网络结构搭建一个图片识别网络,以及训练了神经网络模型,利用上期训练好的神经模型,可以进行我们的图片识别 图片识别结果 导入第三方库 from keras.preprocessing.image import img_to_array from keras.models import …

关于工业环网交换机的应用知识,你了解多少?

我将与大家分享关于环网交换机的应用知识。环网交换机是一种用于环网交换的交换机设备。从它的名字来看&#xff0c;可以推断出它具备环形网络的功能。工业环网交换机是一种专门用于工业领域的特殊交换机。它具有冗余性和可靠性等优点。 因此&#xff0c;许多工业通信领域开始…

Python——yolov8识别车牌2.0

目录 一、前言 二、关于项目UI 2.1、修改界面内容的文本 2.2、修改界面的图标和图片 三、项目修改地方 四、其他配置问题 一、前言 因为后续有许多兄弟说摄像头卡顿&#xff0c;我在之前那个MATS上面改一下就可以了&#xff0c;MAST项目&#xff1a;基于YOLOv8的多端车流检…

短视频矩阵系统:赋予用户创造与分享的力量

在如今快节奏的社交网络时代&#xff0c;人们对于信息获取和娱乐方式的需求也逐渐发生了变化。作为当下最受欢迎的短视频平台之一&#xff0c;抖音短视频矩阵系统正以其独特的魅力和吸引力&#xff0c;深深地打动着亿万用户。 抖音短视频矩阵系统是一种基于移动端的短视频分享…

【C Primer Plus第六版 学习笔记】第十四章 结构和其他数据形式

有基础&#xff0c;进阶用&#xff0c;个人查漏补缺 建立结构声明&#xff1a;描述该对象由什么组成&#xff0c;即结构布局 格式&#xff1a; 关键字 标记&#xff08;可选&#xff09;{结构 }&#xff1b; 举例&#xff1a; struct book{char title[2];char author[4];float …

保护电脑安全,火绒安全助手 V5.0

火绒安全软件&#xff0c;也称为“火绒安全助手”是一款由中国研发的综合安全软件。火绒安全软件旨在为计算机用户提供全面的安全保护&#xff0c;包括防病毒、反恶意软件、网络安全、系统优化等功能。 火绒安全的功能 病毒防护&#xff1a;火绒提供实时的病毒和恶意软件扫描…

年度征文|回顾2023我的CSDN

一年转眼而逝&#xff0c;回顾这一年在csdn的创作&#xff0c;学习&#xff0c;记录历程。回顾过去&#xff0c;才能展望未来&#xff0c;首先看图说话。 今年在csdn的访问量已由年初的2万到年末的50w。粉丝有年初的300个左右&#xff0c;增加到4000个左右。我年初的目标是粉丝…

nvm安装版本后设置默认镜像地址和nvm list available出现空白解决办法

如题 npm config get registry https://registry.npmjs.org/发现镜像地址依旧是默认的 解决 运行输入npm config list 查看这个选项对应的目录 修改为的内容如下 homehttps://npmmirror.com registryhttps://registry.npmmirror.com/或者也可以 homehttps://npmmirror.com…

【nw.js】使用nw.js将html页面打包成exe免安装程序

文章目录 一、批处理zip命令&#xff08;已有可跳过此步骤&#xff09;二、nw.js包三、使用批处理命令打包成exe可执行文件四、使用EnigmaVB打包成免安装可独立运行的exe文件五、结束 一、批处理zip命令&#xff08;已有可跳过此步骤&#xff09; 下载zip&#xff0c;你可以到该…

【Java并发篇】什么是多线程中的上下文切换?

多线程中的上下文切换 ✔️ 简述✔️拓展知识仓✔️减少上下文切换 ✔️ 简述 上下文切换是指 CPU 从一个线程转到另一个线程时&#xff0c;需要保存当前线程的上下文状态&#xff0c;恢复另一个线程的上下文状态&#xff0c;以便于下一次恢复执行该线程时能够正确地运行。 在…

嵌入式面试准备

题目都摘于网上 嵌入式系统中经常要用到无限循环&#xff0c;如何用C编写死循环 while(1){}或者for(;&#x1f609; 内存分区 代码区&#xff0c;全局区&#xff08;全局变量&#xff0c;静态变量&#xff0c;以及常量&#xff09;&#xff0c;栈区&#xff0c;堆区 const关键…

[SWPUCTF 2021 新生赛]sql

[SWPUCTF 2021 新生赛]sql wp 输入 1 正常回显&#xff1a; ?wllm1 返回&#xff1a; Want Me? Cross the Waf Your Login name:xxx Your Password:yyy输入单引号引发报错&#xff1a; ?wllm1 返回&#xff1a; Want Me? Cross the Waf You have an error in your SQL s…

指点云 宁波大带宽大存储云服务器 性能评测

指点云 浙江宁波 云服务器 性能测评&#xff0c;2核4G 100兆带宽 240G存储 5G防御 仅需76.8元/月&#xff1b;4核8G仅需112.8元/月。 官网地址&#xff1a;https://url.vpszj.cn/zhidianyun 优惠注册地址&#xff1a;https://url.vpszj.cn/zhidianyun_r 性价比高的服务器推荐…

【产品设计】零代码核心模块之三:报表

报表的用于数据和信息呈现的一种方式&#xff0c;能够帮助人们更直观地了解数据和信息&#xff0c;从而做出更明智的决策。本文从报表的价值、产品功能以及数据统计分析出发&#xff0c;探讨报表的重要性与使用场景&#xff0c;希望对你有所启发。 报表适用于需要呈现数据或信息…