Dubbo基础学习(笔记一)

news2025/1/15 13:06:06

目录

  • 第一章、概念介绍
    • 1.1)什么是RPC框架
    • 1.2)什么是分布式系统
    • 1.3)Dubbo概述
    • 1.3)Dubbo基本架构
  • 第二章、服务提供者
    • 2.1)目录结构和依赖
    • 2.2)model层
    • 2.3)service层
    • 2.4)resources配置文件
  • 第三章、服务消费者
    • 3.1)目录结构和依赖
    • 3.2)service层
    • 3.3)resources配置文件

友情提醒

先看文章目录,大致了解文章知识点结构,点击文章目录可直接跳转到文章指定位置。

第一章、概念介绍

1.1)什么是RPC框架

RPC 【Remote Procedure Call】是指远程过程调用,是一种进程间通信方式,是一种技术思想,而不是规范。它允许程序调用另一个地址空间(网络的另一台机器上)的过程或函数,而不用开发人员显式编码这个调用的细节。调用本地方法和调用远程方法一样。

1.2)什么是分布式系统

分布式系统是若干独立计算机(服务器)的集合,这些计算机对于用户来说就像单个相关系统,分布式系统(distributed system)是建立在网络之上的服务器端一种结构。
部署在独立服务器上的各个子系统(项目),相互之间可以调用,形成一个大型分布式系统
独立部署的服务器没有额外要求,只需要满足子系统需求即可。
分布式系统中的计算机可以使用不同的操作系统,可以运行不同应用程序提供服务,将服务分散部署到多个计算机服务器上。

1.3)Dubbo概述

Dubbo官网网址:官网链接
①Apache Dubbo 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。可以和Spring框架无缝集成。

②Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案、服务治理方案。

③面向接口代理:调用接口的方法,在A服务器调用B服务器的方法,由dubbo实现对B的调用,无需关心实现的细节,就像MyBatis访问Dao的接口,可以操作数据库一样。不用关心Dao接口方法的实现。这样开发是方便,舒服的。

④支持多种协议:dubbo , hessian , rmi , http, webservice , thrift , memcached , redis。dubbo官方推荐使用dubbo协议。dubbo协议默认端口20880

1.3)Dubbo基本架构

①服务提供者(Provider):暴露服务的服务提供方,服务提供者在启动时向注册中心注册自己提供的服务。服务容器spring负责启动,加载,运行服务提供者。

②服务消费者(Consumer): 调用远程服务的服务消费方,服务消费者在启动时,向注册中心订阅自己所需的服务,服务消费者从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

③注册中心(Registry):注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者 –如果信息有变,注册中心提供新的信息给消费者

④监控中心(Monitor):服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心 –监控服务提供者、消费者状态,与开发没有直接关系
在这里插入图片描述

第二章、服务提供者

2.1)目录结构和依赖

在这里插入图片描述
pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.bjpowernode.dubbo</groupId>
    <artifactId>001-link-orderservice-provider</artifactId>
    <version>1.0.0</version>
    <dependencies>
        <!--Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.3.16.RELEASE</version>
        </dependency>


        <!--Dubbo依赖-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.2</version>
        </dependency>

    </dependencies>


    <build>
        <plugins>

            <!--JDK1.8编译插件-->
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>

        </plugins>

    </build>


</project>

2.2)model层

order

package com.bjpowernode.dubbo.model;


import java.io.Serializable;

public class Order implements Serializable {
    private String id;
    private String goodsName;
    private Double price;
    private Integer amount;

    public Order() {
    }

    public Order(String id, String goodsName, Double price, Integer amount) {
        this.id = id;
        this.goodsName = goodsName;
        this.price = price;
        this.amount = amount;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getGoodsName() {
        return goodsName;
    }

    public void setGoodsName(String goodsName) {
        this.goodsName = goodsName;
    }

    public Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }

    public Integer getAmount() {
        return amount;
    }

    public void setAmount(Integer amount) {
        this.amount = amount;
    }

    @Override
    public String toString() {
        return "Order{" +
                "id='" + id + '\'' +
                ", goodsName='" + goodsName + '\'' +
                ", price=" + price +
                ", amount=" + amount +
                '}';
    }
}

2.3)service层

OrderService

package com.bjpowernode.dubbo.service;

import com.bjpowernode.dubbo.model.Order;

public interface OrderService {
    public Order addOrder(Integer userId,String goodsName, Double price,Integer amount);
}

OrderServiceImpl

package com.bjpowernode.dubbo.service;

import com.bjpowernode.dubbo.model.Order;

public class OrderServiceImpl implements OrderService{
    public Order addOrder(Integer userId, String goodsName, Double price, Integer amount) {
        return new Order("110",goodsName,price,amount);
    }
}

OrderApplication

package com.bjpowernode.dubbo;

import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

import java.io.IOException;

public class OrderApplication {
    public static void main(String[] args) throws IOException {
        /**
         * 启动spring容器:阅读配置文件
         *   1、 new ClassPathXmlApplicationContext("orderservce-provider.xml");
         *   2、 new FileSystemXmlApplicationContext("D:/orderservce-provider.xml");
         *   3、tomcat启动
         */

        new ClassPathXmlApplicationContext("orderservce-provider.xml");

        //标准键盘输入:线程会阻塞
        System.in.read();
    }
}

2.4)resources配置文件

orderservce-provider.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
       xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <!--服务项目名称:唯一 ,它的名称是dubbo内部使用的唯一标识    饭店名称-->
    <dubbo:application name="001-link-order-service-provider"></dubbo:application>

    <!--定义协议:告诉消费者如何访问  怎么访问-->
    <dubbo:protocol name="dubbo" port="20880"></dubbo:protocol>

    <!--
      dubbo:service:提供(暴露)服务     菜单
        interface:区分不同的服务
        ref:关联真正提供服务的bean对象
         registry="N/A":直连
    -->
    <dubbo:service
            interface="com.bjpowernode.dubbo.service.OrderService"
            ref="orderServiceImpl" registry="N/A"
    />

    <!--真正提供服务的bean对象    厨师-->
    <bean id="orderServiceImpl" class="com.bjpowernode.dubbo.service.OrderServiceImpl"></bean>
</beans>

第三章、服务消费者

3.1)目录结构和依赖

在这里插入图片描述
pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.bjpowernode.dubbo</groupId>
    <artifactId>002-link-main-web</artifactId>
    <version>1.0.0</version>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.3.16.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.2</version>
        </dependency>

        <dependency>
            <groupId>com.bjpowernode.dubbo</groupId>
            <artifactId>001-link-orderservice-provider</artifactId>
            <version>1.0.0</version>
        </dependency>


    </dependencies>


</project>

3.2)service层

ShopService

package com.bjpowernode.dubbo.service;


import com.bjpowernode.dubbo.model.Order;

public interface ShopService {

    public Order buyGoods(Integer userId, String goodsName, Double price, Integer amount);

}

ShopServiceImpl

package com.bjpowernode.dubbo.service;

import com.bjpowernode.dubbo.model.Order;

public class ShopServiceImpl implements ShopService {
    OrderService orderService;

    public void setOrderService(OrderService orderService) {
        this.orderService = orderService;
    }

    public Order buyGoods(Integer userId, String goodsName, Double price, Integer amount) {
       // new OrderServiceImpl().addOrder()
        return orderService.addOrder(userId, goodsName, price, amount);
    }
}

ShopApplication

package com.bjpowernode.dubbo;

import com.bjpowernode.dubbo.model.Order;
import com.bjpowernode.dubbo.service.ShopService;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ShopApplication {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("shop-consume.xml");
        ShopService shopServiceImpl = (ShopService)context.getBean("shopServiceImpl");
        Order order = shopServiceImpl.buyGoods(1111, "apple", 10d, 2);
        System.out.println(order);
    }
}

3.3)resources配置文件

shop-consume.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
       xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <!--服务项目名称:唯一-->
    <dubbo:application name="002-link-main-web"></dubbo:application>

    <!--
        dubbo:reference:生成一个 代表远程服务的 bean对象
         id="remoteOrderService":bean对象名称

        url:dubbo服务地址
        interface:区分不同的服务
        registry="N/A":直连
    -->
    <dubbo:reference
            id="remoteOrderService"
            url="dubbo://localhost:20880"
            interface="com.bjpowernode.dubbo.service.OrderService"
            registry="N/A"
            />

    <bean id="shopServiceImpl" class="com.bjpowernode.dubbo.service.ShopServiceImpl">
        <property name="orderService" ref="remoteOrderService"></property>
    </bean>

</beans>

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

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

相关文章

vector【2】模拟实现(超详解哦)

vector 引言&#xff08;实现概述&#xff09;接口实现详解默认成员函数构造函数析构函数赋值重载 迭代器容量size与capacityreserveresizeempty 元素访问数据修改inserterasepush_back与pop_backswap 模拟实现源码概览总结 引言&#xff08;实现概述&#xff09; 在前面&…

VMware虚拟安装Ubuntu,然后切换Ubuntu内核版本

无论你选择哪种方法&#xff0c;一旦进入 GRUB 引导菜单&#xff0c;你应该能够选择需要的内核版本并启动系统。 打开终端&#xff1a;你可以通过按下 Ctrl Alt T 快捷键来打开终端。 使用 sudo&#xff1a;切换内核需要管理员权限&#xff0c;因此你需要使用 sudo 命令。首…

QtCreator 配置 MSVC 编译工具

在官网下载的 Qt 都是配置 mingw&#xff0c;没法使用 webenginewidgets&#xff0c;只有使用 msvc 编译的 Qt&#xff0c;才带有 web 控件。原理都是下载 Visual Studio 安装&#xff0c;使用其中的 msvc 工具&#xff0c;如果只下载 msvc 而不必下载使用 VS 其它工具&#xf…

【日常积累】使用frp进行内网穿透

frp 是什么&#xff1f; frp 是一个专注于内网穿透的高性能的反向代理应用&#xff0c;支持 TCP、UDP、HTTP、HTTPS 等多种协议&#xff0c;且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。 为什么使用 frp&#xff1f; 通过在具…

我记不住的grep和find命令

前言&#xff1a; Linux操作中总是会用到查找操作&#xff0c;无论是查找文件、目录&#xff0c;还是查找文件中的内容等。grep命令用于在某个文件文本中查找指定的字符串&#xff0c;类似于word中的ctrlF&#xff0c;而find命令用于在某个指定的目录中查找某个文件或某个目录。…

深入学习SpringCloud Alibaba微服务架构,揭秘Nacos、Sentinel、Seata等核心技术,助力构建高效系统!

课程链接&#xff1a; 链接: https://pan.baidu.com/s/1hRN0R8VFcwjyCTWCEsz-8Q?pwdj6ej 提取码: j6ej 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 --来自百度网盘超级会员v4的分享 课程介绍&#xff1a; &#x1f4da;【第01阶段】课程简介&#xff1a;全…

函数性能探测:更简单高效的 Serverless 规格选型方案

作者&#xff1a;拂衣、丛霄 2019 年 Berkeley 预测 Serverless 将取代 Serverful 计算成为云计算新范式。Serverless 为应用开发提供了一种全新系统架构。借助 2023 年由 OpenAI 所带来的 AIGC 风潮&#xff0c;以阿里云函数计算 FC、AWS Lambda 为代表的 Serverless 以其更高…

软件压力测试对软件产品起到什么作用?

一、软件压力测试是什么? 软件压力测试是一种通过模拟正常使用环境中可能出现的大量用户和大数据量的情况&#xff0c;来评估软件系统在压力下的稳定性和性能表现的测试方法。在软件开发过程中&#xff0c;经常会遇到一些性能瓶颈和稳定性问题&#xff0c;而软件压力测试的作…

AlexNet网络结构详解

AlexNet论文地址&#xff1a; https://proceedings.neurips.cc/paper/2012/file/c399862d3b9d6b76c8436e924a68c45b-Paper.pdf 1、简介 AlexNet是2012年ISLVRC(ImageNet Large Scale Visual Recognition Challenge)竞赛的冠军网络&#xff0c;图像分类的正确率从70%提升到80%&…

《财讯》期刊简介及投稿要求

《财讯》杂志是经国家新闻出版总署批准&#xff0c;面向国内外公开发行的“全国综合性教育理论学术期刊 面向全国各级各类大、中专经济院校工作者&#xff1b;银行、经贸委、财政及行政管理人员&#xff0c;是作者科研、晋级等方面权威依据的优秀期刊。 主管单位&#xff1a;…

什么是冒烟测试?什么时候做冒烟测试?冒烟测试的用例哪儿来的?

什么是冒烟测试&#xff1f; 冒烟测试&#xff08;Smoke Testing&#xff09; 是软件测试中的一项基础测试&#xff0c;也称为构建验证测试&#xff08;Build Verification Testing&#xff09;&#xff0c;通常用于确认新版本的软件是否可以进行基本的功能测试或者是否能够正…

常见期权策略类型有哪些?

这几天在做一个期权策略类型的整理分类&#xff0c;怎么解释期权策略&#xff0c;期权策略是现代金融市场中运用非常广泛、变化非常丰富、结构非常精妙的金融衍生产品&#xff1b;同时也是一种更为复杂也更为灵活的投资工具&#xff0c;下文介绍常见期权策略类型有哪些&#xf…

图片转换成pdf格式?这几种转换格式方法了解一下

图片转换成pdf格式&#xff1f;将图片转换成PDF格式的好处有很多。首先&#xff0c;PDF格式具有通用性&#xff0c;可以在几乎任何设备上查看。其次&#xff0c;PDF格式可以更好地保护文件&#xff0c;防止被篡改或者复制。此外&#xff0c;PDF格式还可以更好地压缩文件大小&am…

BitLocker已加密 - 解决方案

BitLocker介绍 Bitlocker 是 Windows 磁盘加密功能&#xff0c;旨在通过为整个卷提供加密来保护数据。 BitLocker 解决了因设备丢失、被盗或不适当解除授权而遭受数据盗窃或泄露的威胁。 BitLocker虽然增强了数据安全性&#xff0c;但也增加了用户的使用困难度&#xff0c;因为…

Ansys Zemax | 手机镜头设计 - 第 1 部分:光学设计

本文是 3 篇系列文章的一部分&#xff0c;该系列文章将讨论智能手机镜头模组设计的挑战&#xff0c;从概念、设计到制造和结构变形的分析。本文是三部分系列的第一部分&#xff0c;将专注于OpticStudio中镜头模组的设计、分析和可制造性评估。&#xff08;联系我们获取文章附件…

【猿灰灰赠书活动 - 02期】- 【Java从入门到精通2023年7月最新(第7版)】

说明&#xff1a;博文为大家争取福利&#xff0c;与清华大学出版社合作进行送书活动 图书&#xff1a;《Java从入门到精通》 一、好书推荐 图书介绍 Java入门经典&#xff0c;95万Java程序员的入行选择。配备升级版Java开发资源库&#xff0c;在线大咖课在线答疑&#xff0c;学…

shell脚本之函数及数组

shell脚本之函数及数组 一函数1.1函数的作用1.2函数的基本格式1.3函数的注意事项1.4函数调用的方法1.5函数的返回值1.6函数的传参1.7在外部调用函数1.8函数变量的作用范围1.9函数的递归 二.数组2.1shell数组的定义2.2定义属组的方式2.3数组的数据类型2.4获取数组的数据列表2.5获…

回归预测 | MATLAB实现GRU门控循环单元多输入多输出

回归预测 | MATLAB实现GRU门控循环单元多输入多输出 目录 回归预测 | MATLAB实现GRU门控循环单元多输入多输出预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 MATLAB实现GRU门控循环单元多输入多输出&#xff0c;数据为多输入多输出预测数据&#xff0c;输入10个…

2023电商销售额增幅全球第一!这个国家潜力正在爆发!

随着欧、美等跨境电商市场日趋饱和&#xff0c;拉美地区正逐渐成为全球电商投资的热点。这让该地区增长最强劲的电商市场——阿根廷——成为众多跨境卖家寻求增长与突破的新选择。 那么&#xff0c;阿根廷为什么是跨境卖家扩展电商业务的新机会&#xff1f;阿根廷电子商务市场…

ps变形怎么增加网格? PS怎么变形?

PS图片怎么变形&#xff1a;打开PS&#xff0c;找到需要处理的图片&#xff0c;复制图层&#xff0c;点选“编辑”—“变换”—“变形”&#xff0c;出现变形网格后&#xff0c;按需要操作就可以了。 PS是一款图片编辑的处理软件&#xff0c;它有很多的功能&#xff0c;在图形…