一、前言
环境:idea
、jdk 1.8
、tomcat 8
、mysql 5.7
准备:zookeeper安装完成、dubbo-admin管理平台搭建完成
目的:dubbo入门,学会简单分布式项目搭建。
二、项目创建及配置
整体目录结构如下:
1. 创建DubboDemo(pom) 父工程
使用maven-archetype-site
骨架
pom.xml配置依赖,导入公共依赖jar包(子工程引用时无需写版本号)
<!-- 定义全局的属性(定义依赖jar包的版本号) -->
<properties>
<java.version>1.8</java.version>
<tomcat.version>8.5.28</tomcat.version>
<spring.version>4.3.10.RELEASE</spring.version>
<mybatis.version>3.4.1</mybatis.version>
<mybatis.spring.version>1.3.1</mybatis.spring.version>
<mysql.version>5.1.38</mysql.version>
<druid.version>1.0.9</druid.version>
<dubbo.version>2.5.7</dubbo.version>
<zookeeper.version>3.4.11</zookeeper.version>
<zkclient.version>0.1</zkclient.version>
<slf4j.version>1.7.5</slf4j.version>
<fastjson.version>1.2.29</fastjson.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
2. 创建dubbo-pojo(jar) 实体类
没有使用骨架,默认maven
3. dubbo-mapper(jar) 数据访问
没有使用骨架,默认maven
pom.xml配置依赖,除加载父工程某些依赖外还需依赖dubbo-pojo
jar包
resource文件夹下:
- 新建
applicationContext-mapper.xml
配置Spring整合Mybatis; - 新建
db.properties
; - 新建
mybatis-config.xml
,开启驼峰命名。
4. dubbo-interface(jar) 服务接口
没有使用骨架,默认maven
pom.xml配置依赖,导入dubbo-pojo
jar包
5. dubbo-service(pom) 服务提供者
使用maven-archetype-site
骨架
pom.xml加载依赖后,还需把dubbo-mapper dubbo-interface
jar包依赖进来,并且配置Tomcat插件及端口号
<build>
<plugins>
<!-- 配置tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<path>/</path>
<port>${port}</port>
</configuration>
</plugin>
</plugins>
</build>
配置Tomcat插件后,不用配置本地tomcat再部署项目,直接用插件启动,方便快捷。
6. dubbo-goods-service(war) 商品服务
在service site
下创建,没有使用骨架,默认maven,并用插件转换为web项目:
配置:
- pom.xml 覆盖父工程中的端口号;
- web.xml 加载Spring配置文件
(classpath:applicationContext*.xml)
,并配置Spring核心监听器; - 新建
applicationContext-service.xml
,加载 props下属性文件,导入applicationContext-mapper.xml
配置文件
7. dubbo-web(pom) 服务消费者
使用maven-archetype-site
骨架
pom配置依赖,还需把dubbo-interface
jar包依赖进来,并配置Tomcat插件及端口号
8. dubbo-manager-web(war) 后台管理
在web site
下创建,没有使用骨架,默认maven,并用插件转换为web项目:
配置:
- pom.xml 覆盖父工程中的端口号;
- web.xml 配置SpringMVC前端控制器 配置全局编码过滤器;
- 新建
springmvc.xml
开启组件扫描,开启MVC注解驱动,配置静态资源用web容器默认的servlet处理。
三、代码查询及dubbo配置
1. 实体类
dubbo-pojo
下创建com.dubbo.pojo.Brand
实体类:
public class Brand implements Serializable {
// 主键
private Long id;
// 品牌名称
private String name;
// 品牌首字母
private String firstChar;
}
2. 数据访问
dubbo-mapper
下创建com.dubbo.mapper.BrandMapper
接口:
public interface BrandMapper {
@Select("select * from brand order by id")
List<Brand> findAll();
}
3. 服务接口
dubbo-interface
下创建com.dubbo.service.BrandService
接口:
public interface BrandService {
List<Brand> findAll();
}
4. 服务实现
dubbo-goods-service
下创建com.dubbo.goods.service.impl.BrandServiceImpl
实现类:
@Service(interfaceName = "com.dubbo.service.BrandService")
public class BrandServiceImpl implements BrandService {
@Autowired
private BrandMapper brandMapper;
@Override
public List<Brand> findAll() {
return brandMapper.findAll();
}
}
5. 控制器
dubbo-manager-web
下创建com.dubbo.manager.controller.BrandController
实现类:
@RestController
@RequestMapping("/brand")
public class BrandController {
//引用服务接口代理对象 timeout:调用服务接口方法超时时间毫秒数
@Reference(timeout = 10000)
private BrandService brandService;
@GetMapping("/findAll")
public List<Brand> findAll() {
return brandService.findAll();
}
}
6. dubbo服务提供者配置
在dubbo-service
pom.xml下添加依赖(dubbo / zookeeper / zkclient)
在dubbo-goods-service
applicationContext-service.xml
中配置整合Dubbo,配置如下:
<!-- ############## 配置dubbo服务提供者 ############## -->
<!-- 配置当前应用的名称 -->
<dubbo:application name="dubbo-goods-service"/>
<!-- 配置zookeeper作为注册中心,注册服务地址 -->
<dubbo:registry protocol="zookeeper" address="172.0.0.1:2181"/>
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880"/>
<!-- 配置采用包扫描来暴露服务 -->
<dubbo:annotation package="com.dubbo.goods.service.impl"/>
接口实现类BrandServiceImpl添加Dubbo注解
@Service(interfaceName = "com.dubbo.service.BrandService")
7. dubbo服务消费者配置
在dubbo-web
pom.xml 添加依赖(dubbo / zookeeper / zkclient)
在dubbo-manager-web
springmvc.xml
配置整合Dubbo,配置如下:
<!-- ############## 配置dubbo服务消费者 ############## -->
<!-- 配置当前应用的名称 -->
<dubbo:application name="pinyougou-manager-web"/>
<!-- 配置zookeeper作为注册中心,注册服务地址 -->
<dubbo:registry protocol="zookeeper" address="192.168.12.131:2181"/>
<!-- 配置采用包扫描来引用服务,产生服务接口的代理对象 -->
<dubbo:annotation package="com.pinyougou.manager.controller"/>
控制器类BrandController添加Dubbo注解
@Reference(timeout = 10000)
四、启动并测试
1. 配置命令
DubboDemo clean install
,Dubbo清理重新编译dubbo-goods-service [tomcat7:run]
,先启动goods-servce层服务,为服务提供者dubbo-manager-web [tomcat7:run]
,后启动manager-web层服务,为服务消费者
2. 启动Zookeeper
要在启动dubbo-goods-service
和 dubbo-manager-web
之前启动Zookeeper服务。
3. 测试
在浏览器中输入url:http://localhost:9101/brand/findAll
,页面显示如下,即查询成功。
在浏览器中输入url:http://localhost:8089/dubbo-admin-2.6.0/
,在dubbo-admin查看提供者和消费者。