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

article/2025/9/9 15:00:40

分布式系统中的相关概念

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

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

(三)集群和分布式

(四)架构演进

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的访问url2、自动:进行远程调用RPC3、将结果封装为一个代理对象,给变量赋值*/
@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://chatgpt.dhexx.cn/article/spgBGvo2.shtml

相关文章

Dubbo快速入门教程

Dubbo入门教程 1 、Dubbo概述 DUbbo架构 2、Dubbo快速入门 Zookeeper 安装传统的模块化开发Duboo入门小案例 修改Service模块代码修改WEB模块代码增加公共的接口模块 3、Dubbo高级特性 dubbo-admin管理平台 dubbo-adminm安装 一、dubbo-admin安装二、dubbo-admin简单使用 序…

dubbo教程总结(springboot+dubbo)

概述 Apache Dubbo 是一款微服务开发框架&#xff0c;它提供了 RPC通信 与 微服务治理 两大关键能力。这意味着&#xff0c;使用 Dubbo 开发的微服务&#xff0c;将具备相互之间的远程发现与通信能力&#xff0c; 同时利用 Dubbo 提供的丰富服务治理能力&#xff0c;可以实现诸…

Dubbo入门详细教程

什么是Dubbo&#xff1f; Dubbo 是阿里开源的远程服务调用(RPC)的分布式框架&#xff0c;提供了 SOA 服务治理方案;它的架构主要有五个角色/核心组件&#xff0c;分为是 Container(容器)、Provider(服务的提供方)、Registry(注册中心)、Consumer(服务的消费方)、Monitor(监控中…

dubbo 教程

&#xfeff;&#xfeff; 先给出阿里巴巴dubbo的主页&#xff1a;http://code.alibabatech.com/wiki/display/dubbo/Home-zh 自己的demo下载地址&#xff1a;http://download.csdn.net/detail/u012049463/6763315 1. Dubbo是什么&#xff1f; Dubbo是一个分布式服务框架&…

dubbo使用教程(可直接应用于企业开发)

本dubbo使用教程基于zookeeper-3.4.9搭建&#xff0c;包含服务提供者DubboProvider、和消费者DubboConsumer&#xff0c;可直接在Tomcat上运行。DubboProvider对外开放2个接口&#xff0c;DubboConsumer调用DubboProvider&#xff0c;并对外暴露HTTP服务。DubboProvider还提供了…

Dubbo快速入门

前言&#xff1a;本文需要建立在博主的环境之上来进行&#xff0c;大家也可以用自己的环境测试一下看能不能行得通&#xff0c;如果可以的话请在下方评论&#xff0c;让更多的人知道 Jdk&#xff1a;11 Springboot版本&#xff1a;2.6.6 Dubbo版本&#xff1a;0.2.0&#xf…

dubbo最全的使用教程

dubbo是阿里一款高性能&#xff0c;轻量级的rpc框架&#xff0c;有两大核心功能&#xff1a;远程服务调用和服务治理。本文主要介绍dubbo的运用。 一&#xff0c;安装注册中心zookeeper 1&#xff0c;为什么需要注册中心&#xff0c;不要能不能远程服务调用 答&#xff1a;可以…

VS2017安装教程(详细版)

1.首先下载好安装包 百度网盘下载链接 链接&#xff1a;https://pan.baidu.com/s/1HW8hrLMazRsBkPvkDHkD1Q?pwdz4jg 提取码&#xff1a;z4jg 2.下载到桌面以管理员身份运行 点击继续 3.进入后更改安装位置&#xff0c;选择安装路径&#xff0c;千万不要安装到C盘 4.改完后…

vs2017秘钥

vs2017 企业版秘钥&#xff1a;NJVYC-BMHX2-G77MM-4XJMR-6Q8QF 专业版秘钥&#xff1a;KBJFW-NXHK6-W4WJM-CRMQB-G3CDH 欢迎使用Markdown编辑器 你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章…

自定义 Tabhost 样式

经过了一天的折腾, 在网上也找了不少源码&#xff0c; 但是效果都不是很好&#xff0c;非常长&#xff0c; 最后自己终于写出了一个代码不是很多的Tabhost。 先上图(背景是随便弄的, 所以不怎么样) 首先&#xff0c; 我们要先写一个主xml main.xml 每一个LinearLayout代表…

tabHost 使用方法

近日 学习TabHost的使用 再网上搜不少文章 觉得这篇写的挺好 &#xff01; 出处 &#xff1a;http://www.blogjava.net/freeman1984/archive/2010/10/29/302803.html 查看tabhost的源代码&#xff0c;主要实例变量有&#xff1a; private TabWidget mTabWidget; priv…

android Tabhost控件的使用

Tabhost用来实现如图的效果&#xff1a; 上图的首页、自选、警报是由Tabhost控件来实现的&#xff0c;Tabhost控件中的每个tab其实都是一个Activity&#xff0c;也就是说我创建一个Tabhost&#xff0c;在tabhost中添加tab页就可以实现。 实现方式&#xff1a;1、创建布局文件 …

TabHost详解0

一、TabHost是一个选项卡容器&#xff0c;通过标签页将多个Activity整合到一起。 TabHost的三要素为&#xff1a;TabWidget、FrameLayout、List<TabSpec>。 其主要的使用方式有两种&#xff1a; 1.继承TabActivity&#xff0c;结合对应的xml配置文件导入tab选项内容体 …

TabHost

TabHost的实现有两种方式&#xff0c;第一种继承TabActivity&#xff0c;从TabActivity中用getTabHost()方法获取TabHost。各个Tab中的内容在布局文件中定义就行了。 mainActivity.xml private TabHost myTabHost;Overridepublic void onCreate(Bundle savedInstanceState) {su…

Android初级控件TabHost

TabHost我们都知道是用来实现导航栏布局来切换页面的&#xff0c;这个也是元老级的控件了&#xff0c;现在逐渐被TabLayout,BottomNavigationBar,使用RadioButton自定义。。。等等给取代了。TabHost有个好处就是它添加的是Activity而不像上面那些全部使用Fragment来显示内容。 …

Android中TabHost嵌套TabHost

在嵌套TabHost时&#xff0c;先后遇到了以下情况&#xff1a; 问题1&#xff1a;内部TabHos无显示&#xff0c;只显示了其中的一个Activity&#xff1b; 解决&#xff1a;按下文比对主子TabHos的布局文件和java文件并修改&#xff1b; 问题2&#xff1a;如上所做后&#xff…

Android的Tab与TabHost讲解

在Android应用中&#xff0c;经常会用到TabHost选项卡,可以方便地在不同页面间切换。之前看过网上的一些教程&#xff0c;但大多都是一个形式&#xff0c;看得迷迷糊糊&#xff0c;不能让人很好的理解和学习。所以&#xff0c;在此详细地列出了Tab与TabHost的使用方法&#xff…

Android - TabHost 选项卡功能用法详解

一、实例 二.、TabHost介绍 TabHost组件可以在界面中存放多个选项卡, 很多软件都使用了改组件进行设计; 1. TabHost常用组件 TabWidget : 该组件就是TabHost标签页中上部 或者 下部的按钮, 可以点击按钮切换选项卡; TabSpec : 代表了选项卡界面, 添加一个TabSpec即可添加到TabH…

【转】TabHost详解

请大家尊重作者版权&#xff0c;转载请标明出处&#xff1a;http://blog.csdn.net/harvic880925/article/details/17120325 前言&#xff1a;今天仔细研究了下TabHost&#xff0c;主要是为了实现微信底部导航栏的功能&#xff0c;最后也给出一个链接&#xff0c;这位老兄用TabH…

Android入门第十一篇之TabHost,TabWidget

本文来自http://blog.csdn.net/hellogv/ &#xff0c;引用必须注明出处&#xff01; 这回要介绍的是Android的Tab控件&#xff0c;Tab控件可以达到分页的效果&#xff0c;让一个屏幕的内容尽量丰富&#xff0c;当然也会增加开发的复杂程度&#xff0c;在有必要的时候再使用。An…