一、前言

环境:ideajdk 1.8tomcat 8mysql 5.7

准备:zookeeper安装完成、dubbo-admin管理平台搭建完成

目的:dubbo入门,学会简单分布式项目搭建。

二、项目创建及配置

整体目录结构如下:
DubboDemo目录结构

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) 数据访问
dubbo-mapper目录结构
没有使用骨架,默认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-pojojar包

5. dubbo-service(pom) 服务提供者
  使用maven-archetype-site骨架
  pom.xml加载依赖后,还需把dubbo-mapper dubbo-interfacejar包依赖进来,并且配置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项目:
dubbo-service目录结构
配置:
- 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项目:
dubbo-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-servicedubbo-manager-web之前启动Zookeeper服务。

3. 测试

在浏览器中输入url:http://localhost:9101/brand/findAll,页面显示如下,即查询成功。
查询品牌

在浏览器中输入url:http://localhost:8089/dubbo-admin-2.6.0/,在dubbo-admin查看提供者和消费者。
dubbo-admin访问
提供者和消费者

源码下载


星河滚烫,你是人间理想