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

分布式系统中的相关概念

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

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

(三)集群和分布式

(四)架构演进

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进行通信
所以我们来访问一下
在这里插入图片描述
在这里插入图片描述
然后使用“测试”功能:
不用提供消费者,只要把服务的生存者写完了之后,就可以过来测试了

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

针对Vue前后端分离项目的渗透思路

引言 在目前的开发环境下&#xff0c;越来越多的厂商选择 Vue.js 来实现前端功能的编写&#xff0c;且成熟的前端框架已经可以实现后端代码实现的功能&#xff0c;导致后端目前只负责提供 Api 接口和文档&#xff0c;方便前端的同时去调用。本文主要介绍如何针对这类前后端分离…

java版鸿鹄工程项目管理系统 Spring Cloud+Spring Boot+前后端分离构建工程项目管理系统源代码

鸿鹄工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离构建工程项目管理系统 1. 项目背景 一、随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性&#xff0c;公司对内部工程管…

java紫砂壶交易购物系统 mysql

网络紫砂壶可充通过色彩、图片、说明、设置动画加强了产品了宣传&#xff0c;大大达到了陶瓷业的“色型”要求。实现产品管理方便&#xff0c;起到立竿见影的效果&#xff0c;不用因为更改菜色而重新印刷。只要在后台鼠标轻轻一点&#xff0c;全线马上更新。采用B/S模式&#x…

mybatisPlus初识

文章目录 什么是mybatisplus依赖入门案例自动填充乐观锁悲观锁乐观锁 mybatisPlus实现乐观锁批量查询根据指定条件查询 什么是mybatisplus mybatisplus是mybatis的增强工具&#xff0c;支持多种类型的数据库。 依赖 <dependency><groupId>com.baomidou</group…

快速了解车联网V2X通信

自动驾驶拥有极其巨大的潜力&#xff0c;有可能改变我们的出行方式。它不仅有望永远改变车辆的设计和制造&#xff0c;还会永远改变汽车的所有权乃至整个交通运输业务。要实现全自动驾驶的目标&#xff0c;开发人员需要开发极为复杂的软件&#xff0c;软件中融入的人工智能(AI)…

从一到无穷大 #7 Database-as-a-Service租户隔离挑战与解决措施

文章目录 引言计算侧多租户隔离2DFQSQLVMRetro 其他隔离方法其他 引言 在云环境中租户之间的资源共享对于运营商的成本效益来说非常重要&#xff0c;但是一个主要问题是租户之间的资源隔离&#xff0c;这通常与Qos息息相关&#xff0c;从多租户的角度讲&#xff0c;安全性/性能…

〖Python网络爬虫实战⑲〗- 数据存储之CSV文件

订阅&#xff1a;新手可以订阅我的其他专栏。免费阶段订阅量1000 python项目实战 Python编程基础教程系列&#xff08;零基础小白搬砖逆袭) 说明&#xff1a;本专栏持续更新中&#xff0c;目前专栏免费订阅&#xff0c;在转为付费专栏前订阅本专栏的&#xff0c;可以免费订阅付…

DolphinScheduler海豚调度教程

DolphinScheduler 教程 &#xff08;一&#xff09;入门指南 简介 关于Dolphin Apache DolphinScheduler是一个分布式易扩展的可视化DAG工作流任务调度开源系统。解决数据研发ETL 错综复杂的依赖关系&#xff0c;不能直观监控任务健康状态等问题。DolphinScheduler以DAG流式…

欧拉奔赴品牌2.0时代,女性汽车真实用户需求被定义?

每年的上海国际汽车工业展览会&#xff0c;不仅是各大汽车品牌的技术“秀场”&#xff0c;也是品牌的营销“修罗场”。今年上海车展出圈的营销事件特别多&#xff0c;热度甚至一再蔓延到汽车行业外&#xff0c;其中欧拉也贡献了不少流量。 据了解&#xff0c;在2023上海车展欧…

ModuleNotFoundError: No module named ‘mmcv._ext‘

mmsegmentation使用pyinstaller打包出现问题 mmsegmentation是商汤开源的语义分割框架&#xff0c;里面包含了大量SOTA模型&#xff0c;十分适合从事语义分割工作的小白学习。 最近想将mmsegmentation打包成exe进行使用&#xff0c;但是遇到了一个问题&#xff0c;在打包的过…

Photon AI Translator 和做产品的一些思考

近 4 个月内我一直在做 Apple 平台的产品&#xff0c;虽然从使用量来说「简体中文」用户是占多数&#xff0c;但我一直有做多语言的支持&#xff1a;英语、简体中文和繁体中文。习惯上 Google 翻译的我&#xff0c;基本上在使用 Xcode 过程中也会一直在浏览器开着 Google Trans…

目标跟踪--卡尔曼滤波 与 匈牙利算法

目前主流的目标跟踪算法都是基于Tracking-by-Detecton策略&#xff0c;即基于目标检测的结果来进行目标跟踪。 跟踪结果中&#xff0c;每个bbox左上角的数字是用来标识某个人的唯一ID号。那么问题就来了&#xff0c;视频中不同时刻的同一个人&#xff0c;位置发生了变化&#x…

《智能手机心率和呼吸率测量算法的前瞻性验证》阅读笔记

目录 一、论文摘要 1.背景 2.方法 3.结果 4.结论 二、论文十问 Q1&#xff1a;论文试图解决什么问题&#xff1f; Q2&#xff1a;这是否是一个新的问题&#xff1f; Q3&#xff1a;这篇文章要验证一个什么科学假设&#xff1f; Q4&#xff1a;有哪些相关研究&#xff…

【算法】冒泡排序

一.冒泡排序 主要思想&#xff1a; 反复交换相邻的元素&#xff0c;使较大的元素 逐渐冒泡到数组的末尾&#xff0c;从而实现排序的效果 实现过程&#xff1a; 1.遍历待排序数组&#xff0c;比较相邻的元素&#xff0c;如果前面的元素比后面的元素大&#xff0c; 就交换这两…

07 Kubernetes 网络与服务管理

课件 Kubernetes Service是一个抽象层&#xff0c;用于定义一组Pod的访问方式和访问策略&#xff0c;其作用是将一组Pod封装成一个服务&#xff0c;提供一个稳定的虚拟IP地址和端口号&#xff0c;以便于其他应用程序或服务进行访问。 以下是Kubernetes Service YAML配置文件的…

transformer and DETR

RNN 很难并行化处理 Transformer 1、Input向量x1-x4分别乘上矩阵W得到embedding向量a1-a4。 2、向量a1-a4分别乘上Wq、Wk、Wv得到不同的qi、ki、vi&#xff08;i{1,2,3,4}&#xff09;。 3、使用q1对每个k&#xff08;ki&#xff09;做attention得到a1,i&#xff08;i{1,2,3,4…

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

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

( 数组和矩阵) 769. 最多能完成排序的块 ——【Leetcode每日一题】

❓769. 最多能完成排序的块 难度&#xff1a;中等 给定一个长度为 n 的整数数组 arr &#xff0c;它表示在 [0, n - 1] 范围内的整数的排列。 我们将 arr 分割成若干 块 (即分区)&#xff0c;并对每个块单独排序。将它们连接起来后&#xff0c;使得连接的结果和按升序排序后…

1. 先从云计算讲起

本章讲解知识点 什么是云计算&#xff1f; 为什么要用云计算&#xff1f; 物理服务器与云服务器对比 云计算服务类型 云计算部署类型 1. 什么是云计算&#xff1f; 云计算是一种通过计算机网络以服务的方式提供动态可伸缩的虚拟化资源的计算模式。按照服务层次分为IaaS、…

Nautilus Chain 测试网第二阶段,推出忠诚度计划及广泛空投

随着更多的公链底层面向市场&#xff0c;通过参与早期测试在主网上线后获得激励成为了行业的一个热点话题&#xff0c;在 Apots、Arbitrum One、Optimism等陆续发放了测试空投后&#xff0c;以 Layer3为主要特性的 Nautilus Chain 也在前不久明确表示将会有空投&#xff0c;引发…