文章目录
前言
dubbo是分布式远程调用框架,如何利用dubbo将前后端进行分离。
本章代码已分享至:https://gitee.com/lengcz/dubbo02.git
第一节 环境准备
我们的项目已经进行了前后端模块分离的开发,但是实际上,我们打包运行时,依然是一个单体应用,并不属于分布式应用。
代码见:https://gitee.com/lengcz/dubbo01.git
demo中的zookeeper作为注册中心,也可以使用其它注册中心。
zookeeper安装教程:linux安装zookeeper
第二节 如何利用dubbo将其拆分成分布式调用
我们需要对项目进行微调。
1. 新建dubbo-interface子模块(maven)
dubbo-interface只存放公共的东西。
-
新建dubbo-interface子模块(maven)
-
将UserService移动到dubbo-interface,原本在dubbo-service定义的UserService可以移除。
-
执行install操作,将dubbo-interface安装到本地仓库
2. dubbo-service
- 引入依赖,将抽离定义的公共接口模块引入
<!--引入公共模块-->
<dependency>
<groupId>com.it2</groupId>
<artifactId>dubbo-interface</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
- 引入tomcat插件,我们需要单独启动dubbo-service
<build>
<plugins>
<!--tomcat插件-->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>9000</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
- 在main下面创建webapp\WEB-INF,并在下面创建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*:spring/applicationContext*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
- 在applicationContext.xml中配置dubbo进行包扫描
<?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" xmlns:context="http://www.springframework.org/schema/context"
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 http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!--包扫描-->
<context:component-scan base-package="com.it2.service"/>
<!--dubbo的配置-->
<!--项目名称-->
<dubbo:application name="dubbo-service"/>
<!--配置注册中心-->
<dubbo:registry address="zookeeper://xxx.xxx.xxx.xxx:2181" />
<!--配置dubbo包扫描-->
<dubbo:annotation package="com.it2.service.impl" />
<!--修改服务端口-->
<dubbo:protocol name="dubbo" port="20891"/>
</beans>
- 修改实现类的注入方式,将其注入到dubbo,而不是注册到容器中
@org.apache.dubbo.config.annotation.Service
dubbo-service文件结构(参考)
3. dubbo-web
- 引入依赖,获取公共接口
<dependency>
<groupId>com.it2</groupId>
<artifactId>dubbo-interface</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
- 修改web.xml文件,去掉spring相关内容
- 在springmvc.xml中配置dubbo相关的内容,配置包扫描,让dubbo知道注解的扫描范围
<?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"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://dubbo.apache.org/schema/dubbo
http://dubbo.apache.org/schema/dubbo/dubbo.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd ">
<mvc:annotation-driven/>
<context:component-scan base-package="com.it2.controller"/>
<!--dubbo的配置-->
<!--项目名称-->
<dubbo:application name="dubbo-web">
<!--qos监控-->
<dubbo:parameter key="qos.port" value="12345"/>
</dubbo:application>
<!--配置注册中心-->
<dubbo:registry address="zookeeper://xxx.xxx.xxx.xxx:2181" />
<!--配置dubbo包扫描-->
<dubbo:annotation package="com.it2.controller" />
</beans>
- 修改service的注入方式,使用dubbo注入
@org.apache.dubbo.config.annotation.Reference
dubbo-web文件结构,供参考
4. 启动项目
-
先启动dubbo-service
-
启动dubbo-web
- 打开浏览器,访问controller
5. 首次运行慢的问题
由于首次进行dubbo调用时,本地服务需要从注册中心获取远程服务的地址等信息,之后内存中缓存了这些信息,速度就很快了。
第三节 dubbo-admin的使用
1. 安装dubbo-admin
见教程
dubbo(2):zookeeper和dubbo-admin的安装
2. 配置监控和元数据
<!--修改服务端口-->
<dubbo:protocol name="dubbo" port="20891"/>
<!--元数据-->
<dubbo:metadata-report address="zookeeper://106.13.2.249:2181" />
<!--修改服务端口-->
<dubbo:protocol name="dubbo" port="30891"/>
<!--元数据-->
<dubbo:metadata-report address="zookeeper://106.13.2.249:2181" />
3. 管理dubbo-admin
3.1 服务查询
可以看到dubbo-admin显示了dubbo-service提供的服务
3.2 服务测试
输入接口名称,搜索