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: providerprotocol:name: dubboport: -1# 注册中心  registry:address: nacos://your.nacos.address:8848username: nacospassword: 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 内部已经将序列化和反序列化的过程内部封装了。

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

这里提醒一下:

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【大数据存储与处理】开卷考试总复习笔记

文章目录 实验部分一、 HBase 的基本操作1. HBase Shell入门2. HBase创建数据库表3. HBase数据操作4. HBase删除数据库表5. HBase Python基本编程 before二、 HBase 过滤器操作1.创建表和插入数据2.行键过滤器3.列族与列过滤器4.值过滤器5.其他过滤器6.python hbase 过滤器编程…

Kubernetes(K8S)快速入门

概述 在本门课程中&#xff0c;我们将会学习K8S一些非常重要和核心概念&#xff0c;已经操作这些核心概念对应组件的相关命令和方式。比如Deploy部署&#xff0c;Pod容器&#xff0c;调度器&#xff0c;Service服务&#xff0c;Node集群节点&#xff0c;Helm包管理器等等。 在…

程序员收入与支出 对比分析网红的收入来源

无法收回&#xff0c;就不要花出去。钱只花在增值的事上。 保证一年基本生存的钱不能花。 大额支出要全家协商一致才能花。&#xff08;别把全家坑了&#xff09; 作为程序员&#xff0c;您的收入和支出可以从以下几个方面来考虑&#xff1a; 收入 基本薪资&#xff1a;这是…

C# 使用Pipelines处理Socket数据包

写在前面 在上一篇中对Pipelines进行简单的了解&#xff0c;同时也留下了未解的问题&#xff0c;如何将Pipelines类库运用到Socket通讯过程中来解决粘包和分包。链接地址如下&#xff1a; 初识System.IO.Pipelines https://rjcql.blog.csdn.net/article/details/135211047 这…

【Web API系列】使用getDisplayMedia来实现录屏功能

文章目录 前言一、认识getD该处使用的url网络请求的数据。二、使用步骤1.使用方法一实现录屏2.使用方法二实现录屏3. 运行效果 延伸 前言 Web API经过长期的发展&#xff0c;尤其是最近&#xff0c;发展相当迅猛&#xff0c;现在已经支持很多功能了&#xff0c;一些原生就支持…

IRIS、Cache系统类汉化

文章目录 系统类汉化简介标签说明汉化系统包说明效果展示类分类%Library包下的类重点类非重点类弃用类数据类型类工具类 使用说明 系统类汉化 简介 帮助小伙伴更加容易理解后台系统程序方法使用&#xff0c;降低代码的难度。符合本土化中文环境的开发和维护&#xff0c;有助于…

月入7K, 95后护士转行网优,疫情之后,我选择辞掉“铁饭碗”

成为一个三甲医院的护士是什么体验&#xff1f; 如果你一毕业后就进入一家三甲医院&#xff0c;你可能会享受到稳定的就业环境、近在咫尺的机会与资源。 看似稳定与不错的薪资待遇&#xff0c;成为疫情之后普通打工人挤破脑袋也要进入的存在。似乎也能理解各地医院招聘时动辄80…

每日一题-----逆序字符串

大家好我是Beilef&#xff0c;在一个美好的下午我意外接触到编程并且产生了兴趣&#xff0c;哈哈我要努力成为一个跨界者&#xff0c;让我们一起加油吧O(∩_∩)O 文章目录 目录 文章目录 前言 大家好请上车 一、逆序字符串 题⽬描述&#xff1a; 输⼊⼀个字符串&#xff0c;写…

LabVIEW进行激光斑点图像处理与分析

LabVIEW进行激光斑点图像处理与分析 近年来&#xff0c;激光技术的应用日益繁荣。激光光斑的质量评估和分析技术决定了应用效果&#xff0c;对机器视觉、武器装备、光学测量和医疗设备产生深远影响。就具体用途和技术而言&#xff0c;激光光斑的采集和处理至关重要。即插即用的…

第十五节TypeScript 接口

1、简介 接口是一系列抽象方法的声明&#xff0c;是一些方法特征的集合&#xff0c;这些方法都应该是抽象的&#xff0c;需要有由具体的类去实现&#xff0c;然后第三方就可以通过这组抽象方法调用&#xff0c;让具体的类执行具体的方法。 2、接口的定义 interface interface_…

ElasticSearch 架构设计

介绍 ElasticSearchMySQLIndexTableDocumentRowFieldColumnMappingSchemaQuery DSLSQLaggregationsgroup by&#xff0c;avg&#xff0c;sumcardinality去重 distinctreindex数据迁移 ElasticSearch 中的一个索引由一个或多个分片组成 每个分片包含多个 segment&#xff08;分…

redis的搭建及应用(三)-Redis主从配置

Redis主从配置 为提升Redis的高可用性&#xff0c;需要搭建多个Redis集群以保证高可用性。常见搭建方式有&#xff1a;主从&#xff0c;哨兵集群等&#xff0c;本节我们搭建一主二从的多Redis架构。 redis主从安装1主2从的方式配置&#xff0c;以端口号为redis的主从文件夹。 主…

CSS 文字弹跳效果

鼠标移过去 会加快速度 <template><div class"bounce"><p class"text" :style"{animationDuration: animationDuration}">欢迎使用UniApp Vue3&#xff01;</p></div> </template><script> export d…

Java架构师系统架构设计实践

目录 1 导语2 架构设计实践本章概述3 架构设计要素概述和规划4 架构设计模式5 架构设计输入6 架构设计输出7 架构设计要素总结 想学习架构师构建流程请跳转&#xff1a;Java架构师系统架构设计 1 导语 Java架构师在进行系统架构设计时&#xff0c;需要综合考虑多个方面&#…

【三维生成】稀疏重建、Image-to-3D方法(汇总)

系列文章目录 总结一下近5年的三维生成算法&#xff0c;持续更新 文章目录 系列文章目录一、LRM&#xff1a;单图像的大模型重建&#xff08;2023&#xff09;摘要1.前言2.Method3.实验 二、SSDNeRF&#xff1a;单阶段Diffusion NeRF的三维生成和重建&#xff08;ICCV 2023&am…

【网络安全 | 网络协议】结合Wireshark讲解TCP三次握手

前言 TCP&#xff08;传输控制协议&#xff09;是一种面向连接的、可靠的传输层协议。在建立 TCP 连接时&#xff0c;需要进行三次握手&#xff0c;防止因为网络延迟、拥塞等原因导致的数据丢失或错误传输&#xff0c;确保双方都能够正常通信。 TCP三次握手在Wireshark数据包中…

线程学习(3)-volatile关键字,wait/notify的使用

​ &#x1f495;"命由我作&#xff0c;福自己求"&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;线程学习(2)​​​​ 一.volatile关键字 volatile关键字是多线程编程中一个非常重要的概念&#xff0c;它主要有两个功能&#xff1a;保证内存可见性…

漏洞复现--用友NC Cloud XXE

免责声明&#xff1a; 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

【译文】IEEE白皮书 6G 太赫兹技术的基本原理 2023版

第一章 简介 太赫兹波是介于微波和光波之间的光谱区域&#xff0c;频率从 0.1THz ~ 10THz 之间&#xff0c;波长在 3mm ~ 30μm 之间。提供大块连续的频带范围以满足对 Tbit/s 内极高数据传输速率的需求&#xff0c;使该区域成为下一代无线通信&#xff08;6G&#xff09;的重…

Django(三)

1.快速上手 确保app已注册 【settings.py】 编写URL和视图函数对应关系 【urls.py】 编写视图函数 【views.py】 启动django项目 命令行启动python manage.py runserverPycharm启动 1.1 再写一个页面 2. templates模板 2.1 静态文件 2.1.1 static目录 2.1.2 引用静态…