Duboo介绍与入门

news2025/3/1 0:55:58

在这里插入图片描述

文章目录

    • 1、Dubbo的前世今生
    • 2、Dubbo的快速入门
      • 2.1、Dubbo的基本架构
      • 2.2、Nacos
      • 2.3、管理后台
      • 2.4、入门案例
        • 2.4.1、服务提供者
          • 搭建环境
          • 代码实现
          • 配置文件
        • 2.4.2、服务消费者
          • 搭建环境
          • 代码实现
          • 配置文件
  • 最后说一句

1、Dubbo的前世今生

2011年10月27日,阿里巴巴开源了自己的SOA服务化治理方案的核心框架Dubbo,服务治理和SOA的设计理念开始逐渐在国内软件行业中落地,并被广泛应用。

  • 早期版本的dubbo遵循SOA的思想,是面向服务架构的重要组件。

  • 如今版本的Dubbo作为Spring Cloud的二进制通信方案来发挥Dubbo的性能优势

2、Dubbo的快速入门

2.1、Dubbo的基本架构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aGX5RWbj-1682588353140)(E:/BaiduNetdiskDownload/黑马java/阶段五 服务端框架基础+探花交友项目/探花交友/00-前置课dubbo/04-讲义/assets/image-20210724230935258.png)]

节点角色说明:

节点角色说明
Provider暴露服务的服务提供方。
Consumer调用远程服务的服务消费方。
Registry服务注册与发现的注册中心。
Monitor统计服务的调用次数和调用时间的监控中心。

调用关系说明:

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

2.2、Nacos

Nacos是阿里巴巴的产品,是一个集服务发现,配置管理的平台,在国内受欢迎程度较高。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DjUDrdWw-1682588353141)(E:/BaiduNetdiskDownload/黑马java/阶段五 服务端框架基础+探花交友项目/探花交友/00-前置课dubbo/04-讲义/assets/image-20210727122815029.png)]

进入bin目录,执行启动命令

#进入bin目录
cd bin
#启动
startup.cmd -m standalone

2.3、管理后台

DubboAdmin是阿里巴巴管理提供的管理控制台,可以实现服务查询,详情展示,服务测试等功能。借由DubboAdmin可以更好的帮助开发人员对服务进行管理和监控

#1、下载代码: 
git clone https://github.com/apache/dubbo-admin.git
#2、在 dubbo-admin-server/src/main/resources/application.properties中指定注册中心地址
#3、构建
mvn clean package -D maven.test.skip=true
#4、启动
mvn --projects dubbo-admin-server spring-boot:run
#或者
cd dubbo-admin-distribution/target; java -jar dubbo-admin-0.1.jar
#5、访问 http://localhost:8080

2.4、入门案例

需求:使用Dubbo构建分布式架构,完成根据用户id查询用户

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ncsiD6Rx-1682588353142)(E:/BaiduNetdiskDownload/黑马java/阶段五 服务端框架基础+探花交友项目/探花交友/00-前置课dubbo/04-讲义/assets/image-20210727123052273.png)]

2.4.1、服务提供者

搭建环境

(1)创建user-provider模块导入依赖

<dependencies>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <!--mybatis-->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
    </dependency>

    <!--dubbo的起步依赖-->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>2.7.8</version>
    </dependency>

    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-registry-nacos</artifactId>
        <version>2.7.8</version>
    </dependency>
</dependencies>

(2)编写引导类

package cn.itcast.user;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@MapperScan("cn.itcast.user.mapper")
@SpringBootApplication
public class UserProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(UserProviderApplication.class, args);
    }

}
代码实现

(1)UserServiceImpl

package cn.itcast.user.service;


import cn.itcast.user.api.UserService;
import cn.itcast.user.domain.User;
import cn.itcast.user.mapper.UserMapper;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.factory.annotation.Autowired;

@DubboService
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

	//根据id查询用户名称
    public String queryUsername(Long id) {
        return userMapper.findById(id).getUsername();
    }
}
配置文件
server:
  port: 18081
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/dubbo-demo?useSSL=false
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver
  application:
    name: user-provider
logging:
  level:
    cn.itcast: debug
  pattern:
    dateformat: HH:mm:ss:SSS
dubbo:
  protocol:
    name: dubbo
    port: 20881
  registry:
    address: nacos://127.0.0.1:8848
  scan:
    base-packages: cn.itcast.user.service

2.4.2、服务消费者

搭建环境

(1)创建user-consumer模块导入依赖

<dependencies>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>


    <!--dubbo的起步依赖-->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>2.7.8</version>
    </dependency>

    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-registry-nacos</artifactId>
        <version>2.7.8</version>
    </dependency>
</dependencies>

(2)配置引导类

package cn.itcast.user;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;


@SpringBootApplication
public class UserConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(UserConsumerApplication.class, args);
    }
}
代码实现
package cn.itcast.user.controller;


import cn.itcast.user.api.UserService;
import cn.itcast.user.domain.User;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {

    //引用远程服务
    @DubboReference
    private UserService userService;

    @GetMapping("/username/{id}")
    public String queryUsername(@PathVariable("id") Long id) {
        return userService.queryUsername(id);
    }
}
配置文件
server:
  port: 18081
spring:
  application:
    name: user-consumer
logging:
  level:
    cn.itcast: debug
  pattern:
    dateformat: HH:mm:ss:SSS
dubbo:
  registry:
    address: nacos://127.0.0.1:8848

最后说一句

感谢大家的阅读,文章通过网络资源与自己的学习过程整理出来,希望能帮助到大家。

才疏学浅,难免会有纰漏,如果你发现了错误的地方,可以提出来,我会对其加以修改。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue项目解决跨域问题

跨域&#xff08;Cross-Origin&#xff09;是指在浏览器中运行的 JavaScript 代码试图访问不同源的资源时所遇到的一类限制问题。不同源是指协议&#xff08;http、https&#xff09;、域名&#xff08;example.com、google.com&#xff09;、端口号&#xff08;80、8080&#…

双时间维度,你的时间管理大师丨三叠云

双时间维度 路径 表单 >> 表单设计 功能简介 「甘特图视图」新增 双时间维度设置 的配置项。 为了解决日常任务管理中对于“计划时间”维度的时间设置问题&#xff0c;【时间设置】项增加了【双时间维度设置】的配置项&#xff0c;用户开启后可以设置 计划开始时间 …

Matlab 牛顿迭代法(1)牛顿法

一、牛顿迭代公式 1、定义 2、原理推导 泰勒公式&#xff1a; 常用的8个泰勒公式&#xff1a; 推导&#xff1a; 将f(x)f(x)在Xk 处的泰勒公式展开&#xff1a; f(x)f(Xk)f(Xk)(X-Xk) f(Xk)/2 *(x-Xk)^2.......... 我们吧线性的一部分先拿出来&#xff1a;f(x)f(Xk)f(X…

【python知识】容器对象的推导式

一、说明 Python 推导式&#xff0c;是针对容器对象&#xff08;列表,字典&#xff0c;集合&#xff0c;元组&#xff09;的产生方式的语句。它可以从一个数据序列构建另一个新的数据序列的结构体。 Python 支持各种数据结构的推导式&#xff1a; 列表(list)推导式字典(dict)推…

【Java|golang】1048. 最长字符串链

给出一个单词数组 words &#xff0c;其中每个单词都由小写英文字母组成。 如果我们可以 不改变其他字符的顺序 &#xff0c;在 wordA 的任何地方添加 恰好一个 字母使其变成 wordB &#xff0c;那么我们认为 wordA 是 wordB 的 前身 。 例如&#xff0c;“abc” 是 “abac”…

拍卖小程序开发:从需求分析到设计实现

在当今数字时代&#xff0c;拍卖小程序已经成为了一个重要的销售和交易工具。拍卖小程序的开发不仅能够提供高效的销售渠道&#xff0c;还能够为用户提供全新的购物体验。因此&#xff0c;开发一个拍卖小程序成为了许多商家的首要任务。 拍卖小程序的开发可以帮助商家拓展销售…

uniapp打包

niapp 的打包首先要先配置&#xff0c;配置好了才能去进行打包&#xff0c;如图所示。 这只是第一步。 注意&#xff1a; 1.运行基础路径最好用 ./ &#xff0c;如果配置了其他请自行添加路径。 2.由于uniapp 的特性&#xff0c;所以导致了不支持 history 模式&#xff0c;…

第13届蓝桥杯国赛真题剖析-2022年5月29日Scratch编程初中级组

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第127讲。 第13届蓝桥杯Scratch国赛真题&#xff0c;这是2022年5月29日举办的全国总决赛&#xff0c;比赛仍然采取线上…

三分钟教你看懂 spring 官方文档

新手如何学会查看官方文档API 首先进入官网&#xff1a;这里以 spring boot 为例 &#xff0c;进入spring 官方地址 我们进入 spring boot 这里我们要看文档当然是要 learn 了&#xff0c;所以点进去。 我需要的东西在 IO 模块里面&#xff0c;点 IO 进入 发送邮件是不是有了…

python+nodejs+php+springboot+vue 高校大学生创业管理系统

本论文主要论述了如何使用java语言开发一个高校创新创业管理系统&#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;将论述高校创新创业管理系统的当前背景以及系统开发的目的&#xff0c;后续章节将…

node注册和登录你真的清楚了吗?

文章目录 1.创建数据表1.1 创建用户表 2安装并配置mysql文件2.1安装mysql模块2.2 在db index中 3.注册功能3.1检测表单数据合法3.2判断用户占用3.3 密码加密3.4 插入用户封装错误处理函数 4.登录功能4.1 登录密码的判断4.2 生成token字符4.3 解析token中间件 1.创建数据表 1.1…

AD9208子卡设计资料: 2 路 2.6GSPS/3GSPS AD 采集、2 路 12.6G DA 回放、高性能时钟发生器HMC7044 -FMC 子卡模块

板卡概述 FMC123 是一款基于 FMC 标准规范&#xff0c;实现 2 路 14-bit、3GSPSADC 采集功能、2 路 16-bit 12.6GSPS 回放子卡模块。该模块遵循 VITA57.1 标准&#xff0c;可直接与 FPGA 载卡配合使用&#xff0c;板卡 ADC 器件采用 ADI 公司的 AD9208 芯片&#xff0c;&…

如何在Linkedin领英上找客户

LinkedIn是很多想要获客的朋友&#xff0c;不错的选择&#xff0c;它是一家全球职业社交平台&#xff0c;目前全球会员人数已达6亿之多。在领英&#xff0c;我们可以轻松打造职业形象、获取商业洞察、拓展职业人脉并发现更多职业机遇。 Linkedin主要的作用有以下四点 &#xf…

API 文档管理得这么玩,才会效率加倍

随着互联网的迅速发展&#xff0c;越来越多的企业和开发者开始采用 API 接口作为数据交换和服务调用的标准方式。为了保证API接口的可靠性、稳定性和可维护性&#xff0c;API 文档管理变得愈发重要。 API 文档管理的重要性 API 文档管理是指在开发过程中&#xff0c;对API接口…

Seurat -- ScaleData学习

brief seurat提供了一个教学&#xff0c;其中global scale normalization之后又对数据进行了scale。 默认是对上一步 selected highly variable features进行scale。 概要图以及系列博文可以参见链接。 如果是 SCTransform则不需要手动运行这一步。 下面是就是教程提供的流程…

为什么软件iic需要用开漏输出和上拉电阻

1、疑惑&#xff1a; 不知道大家有没有这种疑惑&#xff0c;在软件iic的配置过程当中&#xff0c;有些时候要输出高低电平&#xff0c;为什么使用开漏输出而不是推挽输出&#xff1f; 2.推挽输出和开漏输出的区别 推挽输出: 输出逻辑0&#xff0c;则N-MOS激活&#xff1b;输…

<C++>类和对象-上

目录 前言 一、类的引入 二、类的定义 1.类的两种定义方式 三、类的访问限定符及封装 1.访问限定符 2.封装 四、类的作用域 五、类的实例化 六、类对象模型 1.计算类对象的大小 2 类对象的存储方式猜测 3. 结构体内存对齐规则 七、this指针 1. 引入 2 this指针的特性 总结 前言…

ChatGPT帮你调用PID算法【结合代码】

目录 PID算法是一种控制算法 下面分别介绍PID算法中的三个参数 MATLAB代码实现PID MATLAB代码实现PID PID算法是一种控制算法 用于控制系统的稳定性和精度。PID算法的名称来源于其三个组成部分&#xff1a;比例&#xff08;P&#xff09;、积分&#xff08;I&#xff09;和微…

CVE漏洞复现-CVE-2021-22205 GitLab未授权 RCE

CVE-2021-22205 GitLab未授权 RCE 漏洞背景和描述 2021年4月15日&#xff0c;GitLab官方发布安全补丁更新修复了GitLab命令执行漏洞&#xff08;CVE-2021-22205&#xff09;。由于GitLab中的ExifTool没有对传入的图像文件的扩展名进行正确处理&#xff0c;攻击者通过上传特制…

不得不说的结构型模式-外观模式

目录 ​编辑 1. 什么是外观模式 1.1外观模式的结构&#xff1a; 2实际案例&#xff1a; 3下面是面试中关于装饰器模式的常见的问题&#xff1a; 3.1下面是问题的答案&#xff1a; 1. 什么是外观模式 Facade模式也叫外观模式, Facade模式为一组具有类似功能的类群&#xff…