- 准备工作
在准备整合springboot与dubbo之前,我们需要做好以下的准备工作:
1、选定整合的springboot、dubbo版本
2、选定zookeeper的版本
不同的版本springboot版本对应不同的dubbo版本,具体的详见版本配置规则
- 工程架构
dubbo-springboot
|dubbo-springboot-api
|src
|main
java
|com.kkcl.dubbo.springboot.api
|bean
|UserAddress.java
|service
|UserService.java
|OrderService.java
|dubbo-springboot-provider
|main
|java
|com.kkcl.dubbo.springboot.provider
|service.impl
|UserServiceImpl.java
|DubboSpringbootProviderApplication.java
|resources
|application.properties
|dubbo-springboot-consumer
|main
|java
|com.kkcl.dubbo.springboot.consumer
|controller
| OrderController.java
|service.impl
|OrderServiceImpl.java
|DubboSpringbootConsumerApplication.java
|resources
|application.properties
- 相关依赖
dubbo-springboot中的pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<modules>
<module>dubbo-springboot-api</module>
<module>dubbo-springboot-provider</module>
<module>dubbo-springboot-consumer</module>
</modules>
dubbo-springboot-provider中的pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
dubbo-springboot-consumer中的pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
<dependency>
<groupId>com.kkcl</groupId>
<artifactId>dubbo-springboot-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
- 主要代码
UserAddress.java
public class UserAddress implements Serializable {
private Integer id;
private String userAddress; //用户地址
private String userId; //用户id
private String consignee; //收货人
private String phoneNum; //电话号码
private String isDefault; //是否为默认地址 Y-是 N-否
.......
gettter and setter
}
UserService.java
public interface UserService
public List<UserAddress> getUserAddressList(String userId);
}
public interface OrderService {
public List<UserAddress> initOrder(String userId);
}
@Service //暴露服务
@Component
public class UserServiceImpl implements UserService {
@Override
public List<UserAddress> getUserAddressList(String userId) {
UserAddress address1 = new UserAddress(1, "北京市", "1", "李老师", "010-56253823", "Y");
UserAddress address2 = new UserAddress(2, "西安市", "1", "王老师", "010-56253812", "N");
return Arrays.asList(address1,address2);
}
}
@Service
public class OrderServiceImpl implements OrderService {
//@Autowired
@Reference // dubbo远程调用自动发现
private UserService userService;
@Override
public List<UserAddress> initOrder(String userId) {
System.out.println("用户Id:"+userId);
List<UserAddress> addressList = userService.getUserAddressList(userId);
return addressList;
}
}
provider中的配置文件
#服务名称
dubbo.application.name=dubbo-springboot-provider
#注册中心的地址
dubbo.registry.address=127.0.0.1:2181
#注册中心
dubbo.registry.protocol=zookeeper
#通信协议
dubbo.protocol.name=dubbo
#通信端口
dubbo.protocol.port=20881
#监控中心自动发现
dubbo.monitor.protocol=registry
consumer中的配置文件
server.port=8081
#服务名称
dubbo.application.name=dubbo-springboot-consumer
#注册中心的地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#监控中心自动发现
dubbo.monitor.protocol=registry
OrderController.java
@Controller
public class OrderController {
@Autowired
private OrderService orderService;
@ResponseBody
@RequestMapping("/initOrder")
public List<UserAddress> initOrder(@RequestParam("uid") String userId){
return orderService.initOrder(userId);
}
}
- 注意要点
1、怎么开启dubbo
2、服务提供方怎么暴露服务
3、服务消费方怎么调用服务
针对1:需要在主启动类中添加注解@EnableDubbo来开启dubbo微服务
针对2:在服务的提供服务时须在服务的实现类中添加dubbo的注解@Service和@Component
针对3:在服务的消费方调用相关服务提供方的服务时添加@Reference注解来远程调用
- 检验效果
1、启动zookeeper
2、启动服务提供方的类启动类
3、启动服务消费方的主启动类
4、在浏览器地址栏输入:http://localhost:8081/initOrder?uid=1观察结果是否调用成功
- 源码地址
https://github.com/kkcl/kkcl-learning-example/tree/master/dubbo-springboot