IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Dubbo -> 正文阅读

[网络协议]Dubbo

1、dubbo简介

1.1Dubbo是什么?

  • 一款分布式服务框架
  • 高性能和透明化的RPC远程服务调用方案
  • SOA服务治理方案

属于流动计算架构(SOA):
随着服务化的进一步发展,服务越来越多,服务之间的调用和依赖关系也越来越复杂,诞生了面向服务的架构体系(SOA),也因此衍生出了一系列相应的技术,如对服务提供、服务调用、连接处理、通信协议、序列化方式、服务发现、服务路由、日志输出等行为进行封装的服务框架

1.2Dubbo架构

?名字解释:

节点说明
Provider暴露服务的服务提供方(生产者)
Consumer调用远程服务的服务消费方(消费者)
Registry????????服务注册与发现的注册注册中心(nacos)
monitor统计服务的调用次数和调用时间的监控中心(监控问题不影响服务调用)
container? ? ? ? ? ?服务运行容器

调用关系说明

  • 服务提供者在启动时,向添加中心添加自己提供的服务。

  • 服务消费者在启动时,向添加中心订阅自己所需的服务。

  • 添加中心返回服务提供者地址列表给消费者,如果有变更,添加中心将基于长连接推送变更数据给消费者。

  • 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

  • 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心

2、dubbo快速入门

?

从上图我们可用看出在一个标准的dubbo服务调用中,他分为3个部分

dubbo-interface

????????负责接口的定义,这里我们通常定义***Face结构的接口类,例如:UserFace

dubbo-producer

????????【生产者】负责接口的实现,这里我们通常用==@DubboService==定义***FaceImpl结构的接口类,例如:UserFaceImpl

dubbo-web

????????【消费者】负责调用接口,通常我们在web层使用==@DubboReference==调用接口

三步走

1导依赖

下面我们来构建第一个dubbo服务,我们需要在dubbo-parent中pom.xml引入下列依赖:

<dependencies>
    <!--接口定义层-->
    <dependency>
        <groupId>com.cheng.dubbo</groupId>
        <artifactId>dubbo-interface</artifactId>
        <version>${interFace.version}</version>
    </dependency>
    <!---spring-cloud-alibaba主配置-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>${spring-cloud-alibaba.version}</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
    <!---springboot主配置-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>${spring.boot.version}</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
</dependencies>

在dubbo-producer和dubbo-web中pom.xml导入:

<dependencies>
    <!--接口定义层-->
    <dependency>
        <groupId>com.cheng.dubbo</groupId>
        <artifactId>dubbo-interface</artifactId>
    </dependency>
    <!--web支持-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--nacos支持-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <!--dubbo支持-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-dubbo</artifactId>
    </dependency>
</dependencies>

2.生产者配置

#服务配置
server:
  #端口
  port: 8080
  #服务编码
  tomcat:
    uri-encoding: UTF-8
#spring相关配置
spring:
  #应用配置
  application:
    #应用名称
    name: dubbo-producer
  main:
    allow-bean-definition-overriding: true
  cloud:
    #nacos添加中心
    nacos:
      discovery:
        server-addr: 192.168.112.77:8848  #nacos配置
        namespace: public
        group: SEATA_GROUP
dubbo:
  #dubbo服务版本
  application:
    version: 1.0.0
    logger: slf4j
  #dubbo接口扫描路径
  scan:
    base-packages: com.cheng.dubbo
  #dubbo服务添加
  registry:
    address: spring-cloud://192.168.112.77
  #dubbo服务协议类型及端口,线程数【这里是默认配置】
  protocol:
    name: dubbo
    port: 28080
    threads: 200
    accesslog: D:/logs/dubbo-producer-01.log

消费者也要配置:

ps:dubbo端口号不一致

#服务配置
server:
  #端口
  port: 8080
  #服务编码
  tomcat:
    uri-encoding: UTF-8
#spring相关配置
spring:
  #应用配置
  application:
    #应用名称
    name: dubbo-producer
  main:
    allow-bean-definition-overriding: true
  cloud:
    #nacos添加中心
    nacos:
      discovery:
        server-addr: 192.168.112.77:8848
        namespace: public
        group: SEATA_GROUP
dubbo:
  #dubbo服务版本
  application:
    version: 1.0.0
    logger: slf4j
  #dubbo接口扫描路径
  scan:
    base-packages: com.cheng.dubbo
  #dubbo服务添加
  registry:
    address: spring-cloud://192.168.112.77
  #dubbo服务协议类型及端口,线程数【这里是默认配置】
  protocol:
    name: dubbo
    port: 28080
    threads: 200
    accesslog: D:/logs/dubbo-producer-01.log

1.编写接口:当前是另一个服务dubbo-interface

public interface UserFace {

    /***
     * @description 你好用户
     * @param userName 用户名称
     * @return 
 * @return: java.lang.String
     */
    String helloUser(String userName);

}

2.编写实现接口:实现dubbo-interface的Userface接口

/**
 * @ClassName UserFaceImpl.java
 * @Description 用户接口实现
 */
@DubboService(version = "${dubbo.application.version}",timeout = 5000)
public class UserFaceImpl implements UserFace {

    @Override
    public String helloUser(String userName) {
        return "Hello!"+userName;
    }
}

ps:实现业务写的是:@DubboService

3.调用dubbo-interface的Userface接口:

/**
 * @ClassName UserController.java
 * @Description 用户controller
 */
@RestController
public class UserController {

    @DubboReference(version = "${dubbo.application.version}",check = false)
    UserFace userFace;

    @GetMapping("{userName}")
    public String helloUser(@PathVariable("userName") String userName){
        return userFace.helloUser(userName);
    }

}

ps:调用者写的是

@DubboReference注解

4.测试:启动dubbo-producer和dubbo-web模块,访问http://127.0.0.1:8081/xxx

?

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章           查看所有文章
加:2022-01-04 13:46:39  更:2022-01-04 13:49:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 12:48:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码