文章目录
- 第一章、Dubbo介绍
- 第二章、注册中心-Zookeeper
- 第三章、dubbo的配置
- 第四章、监控中心
第一章、dubbo介绍
1.1 什么是分布式框架
1.2 应用架构的发展演变
1.3 dubbo框架
1.3.1 为什么dubbo说自己性能高
1.3.2 别的RPC框架
1.3.3 dubbo的前世今生
1.3.4 dubbo的概述
1.3.4 dubbo的基本架构
1.3.5 dubbo支持的协议
1.3.6 dubbo直连方式案例(了解)
1.3.6.1 创建服务提供者
1.利用Maven创建web项目001-link-userservice-provider
2.在Maven中添加spring和dubbo的依赖
<dependencies>
<!--spring依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.2</version>
</dependency>
<!--dubbo依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.2</version>
</dependency>
</dependencies>
<build>
<!--jdk1.8编译插件-->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
3.创建User实体类
只要是分布式开发,实体类必须进行序列化操作 Implements Serializable
4.创建UserService接口和实现类
UserService接口
UserServiceImp实现类
5.创建dubbo配置文件dubbo-userservice-provider.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
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">
<!--服务提供者声明名称:必须保证服务名称的唯一性,它的名称是dubbo内部使用的唯一标识-->
<dubbo:application name="001-link-userservice-provider"/>
<!--
访问服务协议的名称及端口号,dubbo官方推荐使用的是dubbo协议
端口号默认为:20880
name:指定协议的名称
port:指定协议的端口号(默认20880)
-->
<dubbo:protocol name="dubbo" port="20880"/>
<!--
暴露服务接口==>dubbo:service
interface:暴露服务接口的全限定类名
ref:接口引用的实现类在spring容器中的标识
registry:如果不使用中心,则值为:N/A
-->
<dubbo:service interface="com.wangbeita.dubbo.service.UserService" ref="userService" registry="N/A" />
<!--将接口的实现类加载到spring容器中-->
<bean id="userService" class="com.wangbeita.dubbo.service.impl.UserServiceImpl"/>
</beans>
6.在web.xml中添加spring监听器
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--注册监听器-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:dubbo-userservice-provider.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
7.添加服务提供者的Tomcat
1.3.6.2 创建服务消费者
1.利用Maven创建web项目002-link-comsumer
2.在Maven中添加spring、dubbo和前面创建的服务提供者的依赖
先将前面的服务提供者进行打包后缀是.jar
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.2</version>
</dependency>
<!--dubbo依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.2</version>
</dependency>
<!--添加服务提供者
这样才能使用它中的实体类
-->
<dependency>
<groupId>com.wangbeita</groupId>
<artifactId>001-link-userservice-provider</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<!--jdk1.8编译插件-->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
3.创建dubbo配置文件
4.在web.xml中配置中央调度器
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--配置中央调度器-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.dispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:application.xml,classpath:dubbo-consumer.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
5.创建UserController类
6.创建userDetail页面
7.创建服务消费者的Tomcat
8.在浏览器访问,先启动提供者的Tomcat,再启动消费者的Tomcat
1.3.7 dubbo服务化最佳实践(了解)
不是工作中使用
直连方法存在的问题,消费者可以不面向接口,直接访问接口的实现类
1.3.7.1 分包
1.3.7.2 粒度
1.3.7.3 版本
1.3.7.4 改造dubbo项目
1.3.7.4.1 创建公共资源项目
注意:003-link-interface是一个Maven java项目
创建entity包下的User实体类
创建service包下的UserService接口
1.3.7.4.2 创建服务提供者004-link-userservice-provider
1.在pom.xml中添加依赖
<dependencies>
<!--spring依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.2</version>
</dependency>
<!--dubbo依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.2</version>
</dependency>
<dependency>
<groupId>com.wangbeita</groupId>
<artifactId>003-link-interface</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<!--jdk1.8编译插件-->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
2.创建dubbo-userservice-provider.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!--声明dubbo服务提供者的名称:保证唯一性-->
<dubbo:application name="004-link-userservice-provider"/>
<!--
访问服务协议的名称及端口号,dubbo官方推荐使用的是dubbo协议
端口号默认为:20880
name:指定协议的名称
port:指定协议的端口号(默认20880)
-->
<dubbo:protocol name="dubbo" port="20880"/>
<!--暴露端口服务-->
<dubbo:service interface="com.wangbeita.dubbo.service.UserService" ref="userService" registry="N/A"/>
<!--加载业务实现类到spring容器中-->
<bean id="userService" class="com.wangbeita.dubbo.service.impl.UserServiceImpl"/>
</beans>
3.在web.xml中配置监听器
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--注册监听器-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:dubbo-userservice-provider.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
4.创建service接口的实现类
5.创建提供者的Tomcat
1.3.7.4.3 创建服务消费者005-link-cosumer
1.在pom.xml中添加依赖
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.2</version>
</dependency>
<!--dubbo依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.2</version>
</dependency>
<!--添加003的接口工程-->
<dependency>
<groupId>com.wangbeita</groupId>
<artifactId>003-link-interface</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<!--jdk1.8编译插件-->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
2.创建aubbo-consumer.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!--声明服务消费者名称:保证唯一性-->
<dubbo:application name="005-link-cosumer"/>
<!--引用远程接口服务-->
<dubbo:reference
id="userService"
interface="com.wangbeita.dubbo.service.UserService"
url="dubbo://localhost:20880"
registry="N/A"
/>
</beans>
3.创建applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--扫描组件-->
<context:component-scan base-package="com.wangbeita.dubbo.web"/>
<!--配置注解驱动-->
<mvc:annotation-driven/>
<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
4.在web.xml中配置中央调度器
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--配置中央调度器-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.dispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml,classpath:dubbo-consumer.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
5.创建UserController类
6.创建结果页面
7.配置消费者的Tomcat
8.浏览器访问,先启动提供者的Tomcat,再启动消费者的Tomcat
第二章、注册中心-Zookeeper
2.1 注册中心概述
2.2 注册中心工作方式
2.3 Zookeeper注册中心
2.4 Windows平台Zookeeper安装,配置
2.4.1 下载Zookeeper
2.4.2 配置Zookeeper
1.下载的文件zookeeper-3.5.8-beta.tar.gz. 解压后到目录就可以了,例如D:\Program Files\zookeeper\apache-zookeeper-3.5.8-bin\conf修改zookeeper-3.5.8/conf/目录下配置文件
2.复制zoo-sample.cfg改名为zoo.cfg文件内容
再修改dataDir,添加admin.serverPort=8888
3.打开bin目录中的,zkServer.cmd
看到红框的内容就说明配置成功
2.6 改造dubbo—使用Zookeeper(了解)
2.6.1 启动zookeeper
2.6.2 创建公共资源
创建一个006-zk-interface的maven java项目
1.创建user实体类
2.创建service包下的userService接口
2.6.3 创建服务提供者
创建一个007-zk-userservice-provider的maven web工程
1.在pom.xml添加依赖
<dependencies>
<!--spring依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.2</version>
</dependency>
<!--springmvc依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.2</version>
</dependency>
<!--dubbo依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.2</version>
</dependency>
<!--接口工程依赖-->
<dependency>
<groupId>com.wangbeita</groupId>
<artifactId>006-link-interface</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--zookeeper依赖-->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.1.0</version>
</dependency>
</dependencies>
2.创建dubbo-zk-userservice-provider.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!--声明dubbo服务提供者的名称:保证唯一性-->
<dubbo:application name="007-zk-userservice-provider"/>
<!--声明dubbo使用的协议名和端口号-->
<dubbo:protocol name="dubbo" port="20880"/>
<!--现在要使用zookeper注册中心-->
<!--指定注册中心地址和端口号-->
<dubbo:registry address="zookeeper://localhost:2181"/>
<!--暴露服务接口-->
<dubbo:service interface="com.wangbeita.dubbo.service.UserService" ref="userServiceImpl" timeout="1200000"/>
<!--加载接口实现类-->
<bean id="userServiceImpl" class="com.wangbeita.dubbo.service.impl.UserServiceImpl"/>
</beans>
3.在web.xml中注册监听器
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--注册监听器-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:dubbo-zk-userservice-provider.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
4.创建service的实体类UserServiceImpl
5.创建服务提供者的Tomcat
2.5.4 创建服务消费者
创建008-zk-consumer的maven web项目
1.在pom.xml中添加依赖
<dependencies>
<!--spring依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.2</version>
</dependency>
<!--springmvc依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.2</version>
</dependency>
<!--dubbo依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.2</version>
</dependency>
<!--接口工程依赖-->
<dependency>
<groupId>com.wangbeita</groupId>
<artifactId>006-link-interface</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--zookeeper依赖-->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.1.0</version>
</dependency>
</dependencies>
2.创建dubbo-zk-consumer.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!--声明dubbo服务消费者名称:保证唯一性-->
<dubbo:application name="008-zk-consumer"/>
<!--指定注册中心-->
<dubbo:registry address="zookeeper://localhost:2181"/>
<!--引用远程接口服务-->
<dubbo:reference id="userService" interface="com.wangbeita.dubbo.service.UserService"/>
</beans>
3.创建applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--配置组件扫描器-->
<context:component-scan base-package="com.wangbeita.dubbo.web"/>
<!--配置注解驱动-->
<mvc:annotation-driven/>
<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
4.在web.xml中注册中央调度器
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--配置中央调度器-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.dispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:dubbo-zk-consumer.xml,classpath:applicationContext.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
5.创建UserController类
6.创建结果页面
7.创建服务消费者的Tomcat
8.先启动提供者的Tomcat,再启动消费者的Tomcat,浏览器访问
2.7 使用version版本号(掌握)
工作中使用
一般用在如果接口有个老功能,UserServiceImpl,此时要更新一个新功能UserServiceImpl2,但是我们不能把老功能去掉,因为还一部分用户在使用,此时我就要用到version来区分使用的版本.
<dubbo:service interface="com.wangbeita.dubbo.service.UserService" version="1.0.0" ref="userServiceImpl1" />
<dubbo:service interface="com.wangbeita.dubbo.service.UserService" version="2.0.0" ref="userServiceImpl2" />
<dubbo:reference id="userService" interface="com.wangbeita.dubbo.service.UserService" version="1.0.0" />
<dubbo:reference id="userService" interface="com.wangbeita.dubbo.service.UserService" version="2.0.0" />
第三章、dubbo的配置
3.1 配置原则
在服务提供者配置访问参数。因为服务提供者更了解服务的各种参数。
3.2 关闭检查
3.3 重试次数
一般不用
3.4 超时时间
1.dubbo服务端
2.dubbo消费端
第四章、监控中心
4.1 什么是监控中心
4.2 发布配置中心
4.2.1 下载监控中心
https://github.com/apache/incubator-dubbo-ops
这里下载的是源代码,需要手工编译才能使用。以下是编译