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

分布式系统中的相关概念

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

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

(三)集群和分布式

(四)架构演进

Dubbo概述

(一)dubbo概述

1、dubbo概念

黑马程序员Dubbo快速入门,Java分布式框架dubbo教程_第1张图片

2、dubbo架构

黑马程序员Dubbo快速入门,Java分布式框架dubbo教程_第2张图片

Dubbo快速入门

(一)zookeeper安装

黑马程序员Dubbo快速入门,Java分布式框架dubbo教程_第3张图片

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

黑马程序员Dubbo快速入门,Java分布式框架dubbo教程_第4张图片
M1 Mac安装Zookeeper

(二)spring和springmvc整合

1、Dubbo快速入门

黑马程序员Dubbo快速入门,Java分布式框架dubbo教程_第5张图片
以前是本地的注入,Autowire
现在需要的是远程的注入,远程的调用,它们将来是两个项目,分别要部署在两台机器上

黑马程序员Dubbo快速入门,Java分布式框架dubbo教程_第6张图片
先创建一个Empty空项目,然后在里面创建两个maven模块

黑马程序员Dubbo快速入门,Java分布式框架dubbo教程_第7张图片
黑马程序员Dubbo快速入门,Java分布式框架dubbo教程_第8张图片
将来由web模块来依赖这个service模块
web模块作为一个 war 的项目(就是web项目),可以加tomcat插件启动的
而service模块就是一个 jar 的项目

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

<properties>
    <spring.version>5.1.9.RELEASEspring.version>
    <dubbo.version>2.7.4.1dubbo.version>
    <zookeeper.version>4.0.0zookeeper.version>

properties>

<dependencies>
    
    <dependency>
        <groupId>javax.servletgroupId>
        <artifactId>javax.servlet-apiartifactId>
        <version>3.1.0version>
        <scope>providedscope>
    dependency>
    
    <dependency>
        <groupId>org.springframeworkgroupId>
        <artifactId>spring-contextartifactId>
        <version>${spring.version}version>
    dependency>
    
    <dependency>
        <groupId>org.springframeworkgroupId>
        <artifactId>spring-webmvcartifactId>
        <version>${spring.version}version>
    dependency>
 
    
    <dependency>
        <groupId>org.slf4jgroupId>
        <artifactId>slf4j-apiartifactId>
        <version>1.7.21version>
    dependency>
    <dependency>
        <groupId>org.slf4jgroupId>
        <artifactId>slf4j-log4j12artifactId>
        <version>1.7.21version>
    dependency>



    
    <dependency>
        <groupId>org.apache.dubbogroupId>
        <artifactId>dubboartifactId>
        <version>${dubbo.version}version>
    dependency>
    
    <dependency>
        <groupId>org.apache.curatorgroupId>
        <artifactId>curator-frameworkartifactId>
        <version>${zookeeper.version}version>
    dependency>
    
    <dependency>
        <groupId>org.apache.curatorgroupId>
        <artifactId>curator-recipesartifactId>
        <version>${zookeeper.version}version>
    dependency>


    
    <dependency>
        <groupId>com.itheimagroupId>
        <artifactId>dubbo-interfaceartifactId>
        <version>1.0-SNAPSHOTversion>
    dependency>

dependencies>


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

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

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

黑马程序员Dubbo快速入门,Java分布式框架dubbo教程_第9张图片
因为这个service项目是被依赖的,我们需要先安装一下
黑马程序员Dubbo快速入门,Java分布式框架dubbo教程_第10张图片

然后启动web项目
黑马程序员Dubbo快速入门,Java分布式框架dubbo教程_第11张图片
黑马程序员Dubbo快速入门,Java分布式框架dubbo教程_第12张图片
接下来我们就可以把dubbo加入进来。现在是一个本地的调用,待会儿换成远程的调用

(三)服务提供者

黑马程序员Dubbo快速入门,Java分布式框架dubbo教程_第13张图片

web依赖于service

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

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

这节课先改造service

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

代码只有一个地方要改,

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

因为现在我们不需要放到spring容器里了,将来需要把这个类提供的服务对外发布,要把它的ip端口以及访问的路径告诉我们dubbo,dubbo会记录到zookeeper中去
黑马程序员Dubbo快速入门,Java分布式框架dubbo教程_第14张图片

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

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



<dubbo:application name="dubbo-service" />

<dubbo:registry address="zookeeper://10.10.20.18:2181"/>

<dubbo:annotation package="com.itheima.service.impl" />

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

然后启动:
黑马程序员Dubbo快速入门,Java分布式框架dubbo教程_第15张图片
黑马程序员Dubbo快速入门,Java分布式框架dubbo教程_第16张图片

(四)服务消费者

首先要做的第一件事,现在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分别去依赖这个接口即可
因此将来的做法是这样的:
提供一个公共接口
黑马程序员Dubbo快速入门,Java分布式框架dubbo教程_第17张图片
增加一个模块,

这个模块非常简单,只是来进行接口定义的
黑马程序员Dubbo快速入门,Java分布式框架dubbo教程_第18张图片
把UserService粘贴过来,然后把service中的UserService删除

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

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

黑马程序员Dubbo快速入门,Java分布式框架dubbo教程_第19张图片

Dubbo高级特性

(一)dubbo-admin安装

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

黑马程序员Dubbo快速入门,Java分布式框架dubbo教程_第20张图片

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

(二)dubbo-admin使用

黑马程序员Dubbo快速入门,Java分布式框架dubbo教程_第21张图片
然后将service和web都tomcat7:run
黑马程序员Dubbo快速入门,Java分布式框架dubbo教程_第22张图片

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

黑马程序员Dubbo快速入门,Java分布式框架dubbo教程_第23张图片
黑马程序员Dubbo快速入门,Java分布式框架dubbo教程_第24张图片
可以看到没有任何数据,但是我们的消费者(web)项目明明已经启动了。说明并没有和dubbo进行通信,在第一次访问后才会和dubbo进行通信
所以我们来访问一下
黑马程序员Dubbo快速入门,Java分布式框架dubbo教程_第25张图片
黑马程序员Dubbo快速入门,Java分布式框架dubbo教程_第26张图片
然后使用“测试”功能:
不用提供消费者,只要把服务的生存者写完了之后,就可以过来测试了

你可能感兴趣的:(dubbo,java,分布式)