集成Duboo一般需要:
开发Dubbo服务接口========Interface
开发Dubbo服务提供者======ServiceImpl
开发Dubbo服务消费者======Controller
1.开发Dubbo服务接口
新建Maven项目,需要在项目中建实体类,以及服务接口
public class Student implements Serializable {
private Integer id;
private String name;
private Integer age;
//省略set/get
}
服务接口
public interface StudentService {
String sayHi(String name);
Student getStudent(int id);
}
在Maven projects下打开项目===》Lifecycle===》install
可以在本地仓库生成项目的依赖jar包
2.开发Dubbo服务提供者
新建Springboot项目,选择新建Mudule,这次我们可以通过Spring Initializr新建项目,引入项目需要的依赖
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
com.alibaba.spring.boot
dubbo-spring-boot-starter
2.0.0
com.101tec
zkclient
0.10
com.jiuyue
springboot-dubbo-interface
1.0-SNAPSHOT
org.mybatis.spring.boot
mybatis-spring-boot-starter
1.3.1
mysql
mysql-connector-java
SpringBoot与Dubbo集成要引入Dubbo起步依赖,由于使用了zookeeper作为注册中心,则需要加入zookeeper客户端依赖。此外,我们需要访问mysql数据库,所以,还需要Mybatis起步依赖,以及Mysql的连接驱动包,因为我们在服务提供者中要继承实现服务接口,则需要引入服务接口之前生成在仓库中的依赖。
在application.properties配置文件中配置,tomcat的内嵌服务端口,Dubbo,mybatis,dataSource的相关配置信息。
# tomcat的内嵌服务端口
server.port=8080
# Dubbo配置
spring.dubbo.application.name=springboot-dubbo-provider
spring.dubbo.registry=zookeeper://127.0.0.1:2181
# mybatis
mybatis.mapper-locations=classpath:com/jiuyue/dubboprovider/mapper/*.xml
#mybatis.type-aliases-package=classpath:com.jiuyue.model
# dataSource
spring.datasource.url=jdbc:mysql://localhost:3306/springdb?characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=1111
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
注意:需要在pomx.xml配置Mapper.xml的资源路径信息,否则运行后找不到Mapper.xml文件。
src/main/java
**/*.xml
服务提供者类,需要继承实现服务接口,并重写接口中的方法。
@Component
@Service(version = "1.0-SNAPSHOT",timeout = 10000) //Dubbo注解
public class UserServiceImpl implements StudentService{
@Autowired
private StudentMapper studentMapper;
@Override
public String sayHi(String name) {
return "Hi Springboot:"+name;
}
@Override
public Student getStudent(int id) {
//查询数据库
return studentMapper.selectByPrimaryKey(id);
}
}
需要知道:
@Component
@Service(version = "1.0-SNAPSHOT",timeout = 10000) //Dubbo注解
@Component==@Service
@Service是com.alibaba.dubbo.config.annotation.Service中的Dubbo注解,在里面需要指明version = "1.0-SNAPSHOT"(这个是服务接口的jar版本)。
3.开发Dubbo服务消费者
Dubbo服务消费者还是一个Springboot的Web项目,选择新建Mudule,通过Spring Initializr新建项目,引入项目需要的依赖。
org.springframework.boot
spring-boot-starter-web
com.jiuyue
springboot-dubbo-interface
1.0-SNAPSHOT
com.alibaba.spring.boot
dubbo-spring-boot-starter
2.0.0
com.101tec
zkclient
0.10
application.properties配置文件配置Dubbo的相关信息,以及内嵌Tomcat的端口
# tomcat的内嵌服务端口
server.port=9090
# Dubbo配置
spring.dubbo.application.name=springboot-dubbo-dubboconsumer
spring.dubbo.registry=zookeeper://127.0.0.1:2181
消费者Controller类
@RestController
public class StudentController {
@Reference(version = "1.0-SNAPSHOT")
private StudentService studentService;
@RequestMapping("boot/student/{id}")
public Object getStudent(@PathVariable("id") int id){
return studentService.getStudent(id);
}
@RequestMapping("test")
public void getStudent(){
System.out.println("test Success");
}
@RequestMapping("sayHi/{name}")
public String sayHi(@PathVariable("name") String name){
return studentService.sayHi(name);
}
}
测试之前,首先需要下载安装ZooKeeper,我下载的是windows的-zookeeper-3.4.12版本。
ZooKeeper简介:
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
ZooKeeper包含一个简单的原语集,提供Java和C的接口。
下载安装教程可以参考:https://www.cnblogs.com/grimm/p/6732867.html
测试开始:
1.启动ZooKeeper:进入到bin目录,然后输入zkServer.cmd启动。
2.运行服务提供者项目(运行在内嵌Tomcat8080端口)
3.运行服务消费者项目(运行在内嵌Tomcat9090端口)
在浏览器地址栏输入http://localhost:9090/sayHi/jiuyue
Hi Springboot:jiuyue
在浏览器地址栏输入http://localhost:9090/boot/student/1
{"id":1,"name":"jiuyue-update","age":20}