之前写过dubbo的简单项目,用的是Spring+Dubbo,约摸看了下博客的创建时间,然后默默捂了下脸,已经是一年多前的事了。
由于Dubbo最近在疯狂地更新,相信死灰复燃还是有小宇宙可以燃烧的。
这次带来的是SpringBoot+Dubbo+Zookeeper的简单整合,客官们可要赏脸看一看。
首先看下项目的结构,如下图所示(发现现在博客强制加了水印,这水印真的是人类交流的最大阻碍了):
项目名为dubbodemo,它下边分为三个模块,这里贴出pom.xml代码:
4.0.0
com.example
dubbodemo
0.0.1-SNAPSHOT
jar
dubbodemo
Demo project for Spring Boot
provider
consumer
api
接下来分别介绍三个模块的角色。
api中存放entity实体类和service接口,consumer和provider模块都需要依赖这个模块。
User.java,实体类根据需要自己编写,但要注意的是需要实现Serializable这个接口,因为dubbo是RPC框架,消费者consumber和服务提供者privoder的交流通过网络传输,在网络中传输实体是需要将实体对象序列化的。
public class User implements Serializable {
private static final long serialVersionUID = 7739394865008699599L;
private Long id;
private String username;
private String password;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
UserService.java
public interface UserService {
User getUser();
}
pom.xml
4.0.0
com.example
api
0.0.1-SNAPSHOT
jar
api
consumer作为消费者的角色,可以存放controller控制类,当然,如果有其他的,比例拦截器,权限控制,也可以放这里。
consumer是消费者的角色
UserController.java,注意,这里自动注入的注解是@Reference,是dubbo提供的注解,如果用@Autowired,会提供找不到类。
@RestController
@RequestMapping("/user")
public class UserController {
@Reference(version = "1.0.0")
private UserService userService;
@RequestMapping("/getUser")
public User getUserList() {
return userService.getUser();
}
}
application.properties
## 避免和provider工程端口冲突
server.port=7001
## Dubbo 服务消费者配置
spring.dubbo.application.name=consumer
## Dubbo 服务对象的注册中心zookeeper的地址和端口
spring.dubbo.registry.address=zookeeper://localhost:2181
## 服务对象的被注入的包扫描范围
spring.dubbo.scan=com.example.consumer.controller
pom.xml
4.0.0
com.example
consumer
0.0.1-SNAPSHOT
jar
consumer
Demo project for Spring Boot
org.springframework.boot
spring-boot-starter-parent
1.5.14.RELEASE
UTF-8
UTF-8
1.8
1.0.0
com.example
api
0.0.1-SNAPSHOT
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-web
io.dubbo.springboot
spring-boot-starter-dubbo
${dubbo-spring-boot}
slf4j-log4j12
org.slf4j
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin
provider作为消费者角色,可以存放service接口的实现类,如果项目中集成了mybatis,也可以放在这个模块下
UserServiceImpl.java,注意这里的@Service注解,是dubbo提供的注解
@Service(version = "1.0.0")
public class UserServiceImpl implements UserService {
@Override
public User getUser() {
User user = new User();
user.setId(1L);
user.setUsername("没想到吧");
user.setPassword("123456");
return user;
}
}
application.properties
server.port=8001
## Dubbo 服务提供者配置
spring.dubbo.application.name=provider
## Dubbo 服务对象的注册中心zookeeper的地址和端口
spring.dubbo.registry.address=zookeeper://localhost:2181
## 用Dubbo协议在20880端口暴露服务
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
## 包扫描范围
spring.dubbo.scan=com.example.provider.serviceimpl
pom.xml
4.0.0
com.example
provider
0.0.1-SNAPSHOT
jar
provider
Demo project for Spring Boot
org.springframework.boot
spring-boot-starter-parent
1.5.14.RELEASE
UTF-8
UTF-8
1.8
1.0.0
com.example
api
0.0.1-SNAPSHOT
org.springframework.boot
spring-boot-starter
io.dubbo.springboot
spring-boot-starter-dubbo
${dubbo-spring-boot}
slf4j-log4j12
org.slf4j
org.apache.zookeeper
zookeeper
3.4.12
com.github.sgroschupf
zkclient
0.1
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin
到这里,整合java部分的项目代码就完成了,当然,有人会问了,zookeeper呢???被马桶冲走了吗?是的,zookeeper的注册中心老铁们自行去查找如何搭建,很简单的,就像马桶冲水一样简单。
项目启动
步骤一、首先要启动zookeeper,它是注册中心,没有启动的话,provider的服务提供者怎么注册呢?
步骤二、步骤二要特别注意一点,由于consumer和provider都依赖api,那么要将api模块通过maven,依次通过clean,install命令,将api安装到consumer和provider模块中。
步骤三、启动provider,将服务注册到zookeeper中心中
步骤四、启动consumer。
步骤五、测试结果
访问:http://localhost:7001/user/getUser
返回:{"id":1,"username":"没想到吧","password":"123456"}
至此,有没有发现用SpringBoot集成Dubbo特别简单
各位老板,接下来看你们的了