黑马程序员Dubbo快速入门,Java分布式框架dubbo教程

news2024/11/15 20:52:59

分布式系统中的相关概念

(一)互联网项目架构目标-特点

(二)互联网项目架构目标-目标

(三)集群和分布式

(四)架构演进

Dubbo概述

(一)dubbo概述

1、dubbo概念

在这里插入图片描述

2、dubbo架构

在这里插入图片描述

Dubbo快速入门

(一)zookeeper安装

在这里插入图片描述

今天只是先把zookeeper装上,作为dubbo的注册中心来使用
而且zookeeper也是dubbo官方提供/推荐的注册中心

在这里插入图片描述
M1 Mac安装Zookeeper

(二)spring和springmvc整合

1、Dubbo快速入门

在这里插入图片描述
以前是本地的注入,Autowire
现在需要的是远程的注入,远程的调用,它们将来是两个项目,分别要部署在两台机器上

在这里插入图片描述
先创建一个Empty空项目,然后在里面创建两个maven模块

在这里插入图片描述
在这里插入图片描述
将来由web模块来依赖这个service模块
web模块作为一个 war 的项目(就是web项目),可以加tomcat插件启动的
而service模块就是一个 jar 的项目

找到资料-配置文件,分别导入service-provider,web-consumer

<properties>
    <spring.version>5.1.9.RELEASE</spring.version>
    <dubbo.version>2.7.4.1</dubbo.version>
    <zookeeper.version>4.0.0</zookeeper.version>

</properties>

<dependencies>
    <!-- servlet3.0规范的坐标 -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
    <!--spring的坐标-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <!--springmvc的坐标-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${spring.version}</version>
    </dependency>
 
    <!--日志-->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.21</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.21</version>
    </dependency>



    <!--Dubbo的起步依赖,版本2.7之后统一为rg.apache.dubb -->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo</artifactId>
        <version>${dubbo.version}</version>
    </dependency>
    <!--ZooKeeper客户端实现 -->
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-framework</artifactId>
        <version>${zookeeper.version}</version>
    </dependency>
    <!--ZooKeeper客户端实现 -->
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-recipes</artifactId>
        <version>${zookeeper.version}</version>
    </dependency>


    <!--公共接口模块-->
    <dependency>
        <groupId>com.itheima</groupId>
        <artifactId>dubbo-interface</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>

</dependencies>


<build>
    <plugins>
        <!--tomcat插件-->
        <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.1</version>
            <configuration>
                <port>8000</port>
                <path>/</path>
            </configuration>
        </plugin>
    </plugins>
</build>

这是web项目,将来要启动,所以加了tomcat插件
1、改了一下端口-8000
2、给path设为了/,将来就不需要输入项目名称了
3、pom.xml中在version下方加上 <packaging>war</packaging>

由于service不需要启动tomcat,这个插件就不需要导入了,其他就直接粘贴到service的pom.xml中即可

在这里插入图片描述
因为这个service项目是被依赖的,我们需要先安装一下
在这里插入图片描述

然后启动web项目
在这里插入图片描述
在这里插入图片描述
接下来我们就可以把dubbo加入进来。现在是一个本地的调用,待会儿换成远程的调用

(三)服务提供者

在这里插入图片描述

web依赖于service

这里web和service分成了两个模块,但这不属于分布式,还是一种单体架构只是通过maven的分模块把它拆分开了而已
因为分布式指的是这两个模块或者说这两个项目都要能够独立启动,独立对外提供服务
现在这里web的项目可以独立启动对外提供服务,因为controller可以对外访问到
而serivce不能独立启动对外提供服务,因为它是一个jar项目,并不能启动

接下来我们就把它改造为分布式的,或者说soa的架构
那么本地的依赖就不能依赖了,将来要能够独立启动
启动了之后呢,将来要调用通过远程的方式,所以中间通过dubbo的方式来完成它们rpc的远程通信

这节课先改造service

不加packing默认的是jar的项目,也就是说是一个java项目,不能启动
所以加上<packaging>war</packaging>,war的项目就意味着将来可以对外独立启动
因此还要加一个tomcat插件,端口改为9000

代码只有一个地方要改,

// @Service // 将该类的对象创建出来,放到Spring的IOC容器中 bean定义

因为现在我们不需要放到spring容器里了,将来需要把这个类提供的服务对外发布,要把它的ip端口以及访问的路径告诉我们dubbo,dubbo会记录到zookeeper中去
在这里插入图片描述

// @Service // 将该类的对象创建出来,放到Spring的IOC容器中 bean定义
@Service // 将这个类提供的方法(服务)对外发布。将访问的地址 ip,端口,路径注册到注册中心中

还要配置,打开applicationContext.xml
刚才加的@Service要被识别还需要扫描一下,这个扫描将来是由dubbo来做的,不是由spring来做的,所以applicationContext.xml中spring的包扫描就没有用了(注释掉)

<!--dubbo的配置-->
<!--1.配置项目的名称,唯一-->
<dubbo:application name="dubbo-service" />
<!--2.配置注册中心的地址-->
<dubbo:registry address="zookeeper://10.10.20.18:2181"/>
<!--3.配置dubbo包扫描-->
<dubbo:annotation package="com.itheima.service.impl" />

还有最后一件事:现在这个是java的web项目,那么还差一个目录结构,把web的webapp粘贴过来
webapp下WEB-INF下的web.xml,web.xml需要加载spring的核心配置文件<param-value>classpath*:spring/applicationContext*.xml</param-value>,加载这个配置文件之后,就可以扫描对应的applicationContext.xml中dubbo的配置了,这样就完成整个服务的发布的工作
然后web.xml中springmvc的配置就不需要了,还有下面的servlet-mapping也不需要了
那整个service服务的提供方就改造完毕了

然后启动:
在这里插入图片描述
在这里插入图片描述

(四)服务消费者

首先要做的第一件事,现在web还依赖着service,但现在不需要依赖了,将来这两个项目布局在两台机器上的,那如何依赖别人的代码呢?所以不需要了,在pom.xml中删除

删除了之后,这里会存在一个问题,UserController中报错了,找不到UserService了
(方法一(不好):
建一个service包然后建一个UserService接口)

在web.xml中将spring的配置文件的加载删掉,就留下spring-mvc和servlet-mapping

UserController中
(@Reference注意是dubbo包中的)

// 注入Service
// @Autowired // 本地注入

/*
    1、自动:从zookeeper注册中心获取userService的访问url
    2、自动:进行远程调用RPC
    3、将结果封装为一个代理对象,给变量赋值
 */
@Reference // 远程注入
private UserService userService;

由于这里要从zookeeper注册中心获取,那zookeeper在哪就要告诉@Reference注解,所以还是需要来进行一个配置,这个配置和刚才在service中resources/spring/applicationContext.xml中dubbo、zookeeper三个配置拷贝过来,放到web中的springmvc.xml中,然后进行一些微调(名称和dubbo包扫描)
上面的包扫描(component-scan)还要留着,因为还要留着用来扫描springmvc的一些注解

[DUBBO] qos-server can not bind localhost:2222,
注意这里web和service都tomcat7:run后,其中一个会报错,因为qos是做远程控制的一个组件,dubbo会自动启动这个组件,不论是service和web都会启动,那两个就会冲突了,这两个项目将来会部署在两台机器上,但是现在在一个机器上测试就会出问题
所以这里我们只需要改其中任何一个的端口即可,
比如改web,点开web下的springmvc.xml
改成:(改它的端口)

<dubbo:application name="dubbo-web" >
    <dubbo:parameter key="qos.port" value="33333" />
</dubbo:application>

再说回刚才“删除了之后,这里会存在一个问题,UserController中报错了,找不到UserService了“的问题,
更好的办法:
把UserService提出来,形成一个独立的模块,让service和web分别去依赖这个接口即可
因此将来的做法是这样的:
提供一个公共接口
在这里插入图片描述
增加一个模块,

这个模块非常简单,只是来进行接口定义的
在这里插入图片描述
把UserService粘贴过来,然后把service中的UserService删除

然后web和service还要依赖它,在pom.xml

改好了,interface因为是被依赖的模块,首先需要选择它的install(注意是生命周期里的)
然后再启动web和serivce(tomcat7:run)

在这里插入图片描述

Dubbo高级特性

(一)dubbo-admin安装

Monitor监控中心一般是用来统计服务调用次数
官方没有提供一个特别好的monitor的版本
因此我们来介绍功能更强大的另外一个官方提供的dubbo-admin这个工具
dubbo-admin也有monitor的功能,比monitor的功能更强大

在这里插入图片描述

因此要通过node.js的方式来启动这里的vue

(二)dubbo-admin使用

在这里插入图片描述
然后将service和web都tomcat7:run
在这里插入图片描述
在这里插入图片描述
在我们启动dubbo-service这个服务的时候,我们不仅仅要让tomcat来占用9000这个端口(在pom.xml中看);而且dubbo内部也会占用本机的端口,默认是20880,这个可以在applicationContext.xml中修改(将来要在一台机器上启动很多个服务的时候,每一个服务的端口就不能设置成一样的

在这里插入图片描述
在这里插入图片描述
可以看到没有任何数据,但是我们的消费者(web)项目明明已经启动了。说明并没有和dubbo进行通信,在第一次访问后才会和dubbo进行通信
所以我们来访问一下
在这里插入图片描述
在这里插入图片描述
然后使用“测试”功能:
不用提供消费者,只要把服务的生存者写完了之后,就可以过来测试了

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

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

相关文章

Oracle 修改 sga_target 参数设置,虚拟内存值设置

记录一次Oracle数据库单实例维护里程。 数据库启动报错 sga_target参数设置太小&#xff0c;导致数据库无法启动&#xff0c;这种情况下需要修改数据库的spfile的sga_target参数 修复过程如下。 1、启动报错 2、根据spfile 创建pfile 文件。 create pfile‘/app/oracle/i…

项目经理在项目中是什么角色?

有人说&#xff0c;项目经理就是一个求人的差事&#xff0c;你是在求人帮你做事。 有人说&#xff0c;项目经理就是一个与人扯皮的差事&#xff0c;你要不断的与开发、产品、测试等之间沟通、协调。 确实&#xff0c;在做项目的时候&#xff0c;有的人是为了完成功能&#x…

MYSQL基本操作(增删改查)

数据库的列类型 int&#xff1a;整型 用于定义整数类型的数据 float&#xff1a;单精度浮点4字节32位 准确表示到小数点后六位 double&#xff1a;双精度浮点8字节64位 char&#xff1a;固定长度的字符类 用于定义字符类型数据&…

防抖节流(回顾)

防抖定义应用场景&#xff1a;实现思路&#xff1a;_.debounce 源码 节流定义应用场景&#xff1a;实现思路&#xff1a;_.throttle 防抖和节流的区别scroll 事件下的区别mousemove 事件下的区别 防抖 定义 强制函数在固定时间只执行一次&#xff0c;多余执行无效 应用场景&…

Node 10 接口

接口 简介 接口是什么 接口是 前后端通信的桥梁 简单理解&#xff1a;一个接口就是 服务中的一个路由规则 &#xff0c;根据请求响应结果 接口的英文单词是 API (Application Program Interface)&#xff0c;所以有时也称之为 API 接口 这里的接口指的是『数据接口』&#…

企业如何通过CRM系统有效触达客户,获取潜在商机

“守株待兔”式坐等客户上门的时代了已经过去了&#xff0c;尤其是在存量时代&#xff0c;企业想要提高销售&#xff0c;扩大客源&#xff0c;就要不断的通过各种渠道来去拓展自己的客户和销路&#xff0c;而互联网时代&#xff0c;获客的渠道也丰富多样&#xff0c;企业选择好…

权威重磅:全球区块链专利状况研究

文 | 国家知识产权局知识产权发展研究中心 区块链&#xff08;Blockchain&#xff09;是一种安全共享的去中心化的数据账本。近年来&#xff0c;区块链与大数据、云计算、人工智能、5G等新一代信息技术快速融合发展&#xff0c;应用已延伸到数字金融、物联网、智能制造、供应链…

Java面试题总结 | Java面试题总结11- Spring模块(持续更新)

Spring 文章目录 Spring什么是SpringSpringMVC、Spring、SrpingBoot的区别SSM和SpringBoot的区别IOC容器Spring Boot Starter有什么用SpringBoot启动原理说说你对AOP的理解spring用到的设计模式Spring是怎么解决循环依赖的&#xff1f;说说你对MVC的理解spring mvc执行流程什么…

CRM系统云部署和本地部署的优缺点有哪些

CRM客户管理系统有两种部署方式&#xff0c;分别是本地部署和云端部署。每一种部署方式都有相应的优势和劣势。下面我们就来说说&#xff0c;CRM本地部署和CRM云部署有哪些区别&#xff1f; 本地部署 CRM本地部署是指将CRM软件安装在企业自己的服务器上&#xff0c;这些服务器…

做电商数据分析可视化,这个国产BI软件很香

电商数据分析的数据采集整合工作量大&#xff0c;对实时性要求高&#xff0c;特别是跨境电商物流周期长不利于做库存计划不说&#xff0c;还容易出现运营、物流、财务、生产信息脱节等情况。难&#xff0c;但难不倒国产BI软件。在国内外BI软件中&#xff0c;国产BI软件明显更具…

php用一个单页读取数据库中带有超链接的内容并提供人工清理链接的功能(超链接部分可替换为任何查询条件)/ 代码拿去用

起因 某客户安全报告提示有一个过期网站的链接&#xff0c;且该过期网站变成了羞羞网站~~这个问题是他们平时发文的时候直接复制了别的网站内容&#xff0c;又没有用编辑器的清理工具导致的。事后&#xff0c;客户提出能不能把所有内容都查一遍&#xff0c;并去掉所有链接&…

风控系统就该这么设计(万能通用),那是相当稳定

一、背景 1.为什么要做风控? 2.为什么要自己写风控? 3.其它要求 二、思路 1.风控规则的实现 2.调用方式的实现 三、具体实现 1.风控计数规则实现 2.注解的实现 四、测试一下 1.写法 2.Debug看看 一、背景 1.为什么要做风控? 这不得拜产品大佬所赐&#xff0c;我们…

分享:集群吞吐量以1抵5,车企MySQL八大痛点的解决方案

本文来自社区分享&#xff0c;仅限交流探讨。原文作者&#xff1a;李婵玲&#xff0c;某智能车企DBA。欢迎访问 OceanBase 官网获取更多信息&#xff1a;https://www.oceanbase.com/ 最近一年&#xff0c;我们完成了从MySQL到OceanBase的替代过程&#xff0c;既降低了架构复杂度…

PostgreSQL 基础知识:psql 入门

PostgreSQL 有一个单独的命令行工具psql&#xff0c;该工具已经使用了几十年&#xff0c;并且包含在任何 PostgreSQL 安装中。许多 PostgreSQL 的长期用户、开发人员和管理员都依赖它来帮助他们快速连接到数据库、检查模式和执行 SQL 查询。 了解如何安装和使用基本psql命令是…

【每日一题】

文章目录 C 技术点多边三角形剖分的最低得分&#xff08;dp思路&#xff0c;选不选问题&#xff09;移动石子到连续&#xff08;思路&#xff09; C 技术点 1. string类型使用find函数。 int index s.find(""); if (inde ! string:npos){ xx }2. transform函数&…

[代码随想录]二叉树

二叉树 文章目录 二叉树1. 二叉树的递归遍历144.前序遍历94.中序遍历145.后续遍历 *2.二叉树的迭代遍历145.前序遍历94.中序遍历145.后续遍历 3.统一二叉树迭代遍历144.前序遍历94.中序排序145.后序遍历 4.层序遍历102.二叉树的层序遍历107. 二叉树的层序遍历 II199. 二叉树的右…

[Dev‘Life] Dubai工签指南

Dubai工作签证一般为两年有效期&#xff0c;主要流程为 PCR-TEST-REPORT&#xff08;体检&#xff09;劳动者通识培训(听课)申请ID (录制指纹/掌静脉) 前置查询&#xff1a;Dubai-ICA官网查看签证有效期 免费查询签证的状态&#xff0c;相关查询连接在此&#xff1a; https://…

与伙伴同行,Serverless 让创新触手可及

今天 Serverless 的方式真正意义上做到了云产品、云技术的开箱即用&#xff0c;企业和开发者不需要再关注底层的资源配置&#xff0c;更多地把精力放在业务系统的开发中。 4 月 26 日&#xff0c;在 2023 阿里云合作伙伴大会现场&#xff0c;阿里云智能 CTO 周靖人发表主题演讲…

XML解析(DOM4j)检索(Xpath)

XML在以后更多的是用来作为配置文件的。 一. 配置文件 什么是配置文件 用来保存程序在运行时需要的一些参数。 当配置信息比较复杂的时候&#xff0c;我们就可以用XML。 二. XML概述 三. XML的创建、语法规则 根标签就是写在最外面的标签。 <?xml version"1.0&quo…

【Unity3D小功能】Unity3D中实现Text显示版本功能

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 在项目开发中&#xff0c;会遇到要控制版本的情况&#xff0c;…