网游活动情报网 - 新服预约与福利指南

idea工具中搭建DUbbo的实例(超级详细)

之前一直做spring boot框架,mybatis做持久层,mysql做数据库,搭建环境时,各种问题,不是数据库没连上,就是mapper文件未扫描成功,这次就着搭建dubbo项目,总结一下。

一、环境准备

1、下载好zookeeper,进入conf目录将zoo_sample.cfg改名为zoo.cfg,然后将其打开配置dataDir和dataLogDir,找个空文件就行了,例如:

代码语言:javascript复制dataDir=D:\\azookerpersstudy\\data

dataLogDir=D:\\azookerpersstudy\\log

2、进入bin目录运行zkServer.cmd,启动成功后环境就好了,注意:搭建的项目能否运行成功的前提必须zookeeper处于启动状态,它相当于spring cloud中的eureka注册中心,我们的provider和custumer会在zookeeper上注册。

3、我们会创建三个项目,一个作为公共项目,提供基础,打成jar包install进本地仓库,供另两个项目provider和coustumer引入依赖。

二、公共项目操作

在idea中创建一个maven项目(不是spring项目),注意提供实体类和接口。

1、在bean层创建实体类,实体类会在服务之间调用,必须以流的形式,实现Serializable,同时生成set,get方法。

代码语言:javascript复制public class User implements Serializable {

private int uid;

private String uname;

private String upwd;

}

2、service层创建接口

代码语言:javascript复制public interface UserService {

public String getUserNameByUid(int uid);

}

三、内容提供者操作

1、在provider中调用数据库,所有需要引入mabatis和mysql依赖,同时为了调用实体类和接口需要引入公共组件,dubbo项目需要引入其依赖。当然还有web依赖,只展示dubbo组件依赖和公共组件依赖如下:

(1)公共组件依赖,是第一个项目中install到本地maven仓库的jar包。

代码语言:javascript复制

cn.bdqn.doubbe-common

doubbe-common

1.0-SNAPSHOT

(2)dubbo引入的是阿里的依赖

代码语言:javascript复制

com.alibaba.boot

dubbo-spring-boot-starter

0.2.0

2、配置applicaion.properties文件

(1)dubbo的配置,protocol.port的端口与custumer一致,否则会报错,我就是在这儿错了半天。,同时注册中心的端口一定要与本地打开的zookeeper地址一致。

代码语言:javascript复制#项目端口

server.port=

#服务提供者所暴露的协议配置信息

dubbo.protocol.port =

#项目名

dubbo.application.name=dubbo-provider

#dubbo扫描的service层

dubbo.scan.base-packages=com.bdqn.doubbleuserprovider.service

#dubbo在zookeeper的注册中心地址

dubbo.registry.address=zookeeper://127.0.0.1:2181

(2)mysql数据库配置,用户名,密码一定不要错了。

代码语言:javascript复制spring.datasource.url=jdbc:mysql://localhost:3306/insurance?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8

spring.datasource.username=root

spring.datasource.password=

spring.datasource.driver-class-name=com.mysql.jdbc.Driver

(3)配置.xml文件路径,这个路径用我们mybatis的xml必须一致,不配置会报Invalid bound statement (not found);

代码语言:javascript复制mybatis.mapper-locations=classpath:com/bdqn/doubbleuserprovider/mapper/*.xml

3、mapper的UserDao和UserMapper.xml配置

(1)UserDao的内容与公共组件中的Service的接口一致对应。

代码语言:javascript复制 /**

* 从数据库查询姓名

* @param uid

* @return

*/

public String getUserNameByUid(@Param("uid") int uid);

(2)xml文件如下:namespace要与dao对应,相当于id值,该查询要有resultType,没有就报错了,我在这儿也踩了。

代码语言:javascript复制

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

4、service层在provider中只写实现类就行了。

(1)@Component声明为组件。

(2)@Service注解来自dubbo,它的interfaceClass值表示来自哪个common接口。

代码语言:javascript复制@Component

@Service(interfaceClass = UserService.class)

public class UserServiceImpl implements UserService {

@Autowired

UserDao ud;

@Override

public String getUserNameByUid(int i) {

return ud.getUserNameByUid(i);

}

}

5、在启动类上加注解

(1)@SpringBootApplication 启动类注解

(2)@EnableDubbo dubbo注解

(3)@MapperScan("com.bdqn.doubbleuserprovider.mapper")该注解指向mapper包,没有或者错误会报:我也是踩了。

代码语言:javascript复制//Field ud in com.bdqn.doubbleuserprovider.service.UserServiceImpl

// required a bean of type 'com.bdqn.doubbleuserprovider.mapper.UserDao' that could not be found.

6、在pom文件中,还需要进一步的配置,在build内部加资源配置:

代码语言:javascript复制

src/main/java

**/*.xml

false

src/main/resources

**/*.properties

**/*.xml

**/*.html

**/*

false

否则会报下面错误:

Invalid bound statement (not found):

三、消费者操作

1、由于消费者不需要操作数据库,所有只需要引入dubbo,web和公共组件即可。与provider的依赖一致。

2、配置文件application.properties中,这次扫描service中的实现类,因为在其中使用@Reference引用服务。

代码语言:javascript复制server.port=

dubbo.protocol.port =

dubbo.application.name=dubbo-consumer

dubbo.scan.base-packages=com.bdqn.mycustomer.service.impl

dubbo.registry.address=zookeeper://127.0.0.1:2181

3、在service层中,创建customer接口与common中的接口对应。

代码语言:javascript复制public interface UserConsumerService {

public String getUserNameByUid(int uid);

}

4、实现service接口,在service的impl中创建。

(1)service注解来自spring框架

(2)@Reference来自dubbo,引用服务来自公共组件common。

代码语言:javascript复制@Service

public class UserConsumerServiceImpl implements UserConsumerService {

@Reference

UserService us;

@Override

public String getUserNameByUid(int uid) {

return us.getUserNameByUid(uid);

}

}

5、controller层,请求调用

(1)返回json格式的内容

代码语言:javascript复制@RestController

public class UserController {

@Autowired

UserConsumerService service;

@RequestMapping(value = "getuser/{uid}",method = RequestMethod.GET)

public String getUserNameByUid(@PathVariable("uid") String uid){

return service.getUserNameByUid(Integer.valueOf(uid));

}

}

(2)如果要返回html视图,需要在provider项目中加thymeleaf依赖。因为它是内容提供者。

代码语言:javascript复制

org.springframework.boot

spring-boot-starter-thymeleaf

(3)同时在内容提供者的html文件中加声明。

代码语言:javascript复制四、结果展示

打开浏览器,访问地址就得到了结果。

五、总结到此,我们就实现了一个简单的dubbo项目