Dubbo SpringBoot版本入门
Dubbo SpringBoot版本入门
- 1、目的
- 2、方法
- 2.1 系统工程总体介绍
- 2.2 系统工程环境搭建
- 2.2.1 新建`springboot-order-service-consumer`服务
- 2.2.2 新建`springboot-user-service-provider`服务
- 2.2.3 新建`springboot-common-service`服务
- 2.3 填充内容
- 2.3.1 `springboot-common-service`服务填充内容
- 2.3.2 `springboot-order-service-consumer`服务填充内容
- 2.3.3 `springboot-user-service-provider`服务填充内容
- 2.4 测试
- 3、总结
1、目的
学习如何使用SpringBoot
版本的Dubbo
搭建一个简单的项目。这里笔者使用商城作为案例,一共有两个服务:订单服务、用户服务。其中用户服务是服务提供者,订单服务是服务消费者。实现的功能是订单服务调用用户服务实现用户收货地址的查询。
2、方法
2.1 系统工程总体介绍
需要将系统服务进行拆分成springboot-order-service-consumer
,springboot-user-service-provider
,springboot-common-service
。三个工程。其中springboot-order-service-consumer
是订单服务,springboot-user-service-provider
是用户服务,springboot-common-service
是公共服务。
2.2 系统工程环境搭建
首先新建一个空的Java
工程。如下图所示,直接下一步直到完成,写好自己的工程名即可。
2.2.1 新建springboot-order-service-consumer
服务
首先新建一个module
,如下图所示。
然后选择spring initializr
选项,直接下一步即可。如下图所示。
修改包名及配置如下所示。
由于消费者本文将使用Web
方式进行测试,这里选择了一个Spring Web
。
点击下一步,命名好工程,结果如下图所示。
2.2.2 新建springboot-user-service-provider
服务
大体步骤同2.2.1
,这里将贴出不同的地方截图,请读者自行理解。
Module
参数配置如下图所示。
服务提供者我们不需要Web
测试,所以这里不需要选择其他依赖。直接下一步即可。如下图所示。
新建好工程之后如下图所示。
2.2.3 新建springboot-common-service
服务
新建公共服务,提供个服务的公共类。首先新建一个Maven
工程。如下图所示。
定义好工程名,如下图所示。
新建好的工程结构如下图所示。
2.3 填充内容
2.3.1 springboot-common-service
服务填充内容
首先在springboot-common-service
工程内新建cn.edu.njust.gmall.common
包名,效果如下图所示。
接着新建基本的Bean
和Service
接口,结构图如下所示。
UserAddress 用户地址Bean
package cn.edu.njust.gmall.common.bean;
import java.io.Serializable;
/** * 用户地址 * */
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-否
public UserAddress() {
super();
// TODO Auto-generated constructor stub
}
public UserAddress(Integer id, String userAddress, String userId, String consignee, String phoneNum,
String isDefault) {
super();
this.id = id;
this.userAddress = userAddress;
this.userId = userId;
this.consignee = consignee;
this.phoneNum = phoneNum;
this.isDefault = isDefault;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserAddress() {
return userAddress;
}
public void setUserAddress(String userAddress) {
this.userAddress = userAddress;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getConsignee() {
return consignee;
}
public void setConsignee(String consignee) {
this.consignee = consignee;
}
public String getPhoneNum() {
return phoneNum;
}
public void setPhoneNum(String phoneNum) {
this.phoneNum = phoneNum;
}
public String getIsDefault() {
return isDefault;
}
public void setIsDefault(String isDefault) {
this.isDefault = isDefault;
}
}
OrderService 订单服务接口
package cn.edu.njust.gmall.common.service;
import cn.edu.njust.gmall.common.bean.UserAddress;
import java.util.List;
public interface OrderService {
/** * 初始化订单 * @param userId * @return */
List<UserAddress> initOrder(String userId);
}
UserService 用户服务接口
package cn.edu.njust.gmall.service;
import cn.edu.njust.gmall.bean.UserAddress;
import java.util.List;
public interface UserService {
/** * 根据用户id返回所有的收货地址 * * @param userId * @return */
List<UserAddress> getUserAddressList(String userId);
}
然后在springboot-order-service-consumer
,springboot-user-service-provider
服务中引入公共依赖和Dubbo
依赖。
2.3.2 springboot-order-service-consumer
服务填充内容
首先工程总体结构如下图所示。
InitController 初始化订单Controller类
package cn.edu.njust.gmall.order.controller;
import cn.edu.njust.gmall.common.bean.UserAddress;
import cn.edu.njust.gmall.common.service.OrderService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
@Controller
public class InitController {
// Dubbo的2.7.7版本中已经标注了Reference和Service注解为@Deprecated弃用了。
// 改用DubboReference和DubboService这两个注解了
@DubboReference
OrderService orderService;
@ResponseBody
@RequestMapping("/initOrder")
public List<UserAddress> initOrder(@RequestParam("uid") String userId) {
return orderService.initOrder(userId);
}
}
OrderServiceImpl
package cn.edu.njust.gmall.order.service.impl;
import cn.edu.njust.gmall.common.bean.UserAddress;
import cn.edu.njust.gmall.common.service.OrderService;
import cn.edu.njust.gmall.common.service.UserService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.stereotype.Service;
import java.util.List;
@DubboService
@Service
public class OrderServiceImpl implements OrderService {
@DubboReference
UserService userService;
public List<UserAddress> initOrder(String userId) {
return userService.getUserAddressList(userId);
}
}
OrderApplication
package cn.edu.njust.gmall.order;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@EnableDubbo
@SpringBootApplication
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
}
application
server.port=8085
dubbo.application.name=springboot-order-service-consumer
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.monitor.protocol=registry
pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>cn.edu.njust.gmall</groupId>
<artifactId>order</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>order</name>
<description>订单服务-消费者</description>
<properties>
<java.version>1.8</java.version>
</properties>
<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>org.example</groupId>
<artifactId>springboot-common-service</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- Dubbo Spring Boot Starter -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.8</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.13.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.3.3 springboot-user-service-provider
服务填充内容
首先工程总体结构如下图所示。
UserServiceImpl
package cn.edu.njust.gmall.user.service.impl;
import cn.edu.njust.gmall.common.bean.UserAddress;
import cn.edu.njust.gmall.common.service.UserService;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@DubboService
@Service
public class UserServiceImpl implements UserService {
public List<UserAddress> getUserAddressList(String userId) {
ArrayList<UserAddress> userAddresses = new ArrayList<UserAddress>();
for (int i = 0; i < 10; i++) {
UserAddress userAddress = new UserAddress(i, "userAdderss_" + i, "userId_" + i,
"consignee_" + i, "phoneNum_" + i, "isDefault_" + i);
userAddresses.add(userAddress);
}
System.out.println(userAddresses);
return userAddresses;
}
}
UserApplication
package cn.edu.njust.gmall.user;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@EnableDubbo
@SpringBootApplication
public class UserApplication {
public static void main(String[] args) {
SpringApplication.run(UserApplication.class, args);
}
}
application
server.port=8086
dubbo.application.name=user-service-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
pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>cn.edu.njust.gmall</groupId>
<artifactId>user</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>user</name>
<description>用户服务-提供者</description>
<properties>
<java.version>1.8</java.version>
</properties>
<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>org.example</groupId>
<artifactId>springboot-common-service</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- Dubbo Spring Boot Starter -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.8</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.13.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
以上则建立好全部工程。启动服务。
2.4 测试
这里还需要启动zookeeper
作为注册中心。然后启动两个服务即可。效果图如下。
然后访问http://localhost:8085/initOrder?uid=1即可。
效果图如下。
说明服务成功启动。Dubbo
服务成功搭建起来了。
有点菜,有时间再优化一下。
3、总结
书上的代码直接运行绝大部分是对的,但是总有一些软件的更新使得作者无能为力。之前的API是对的,但是之后就废弃了或修改了是常有的事。所以我们需要跟踪源代码。这只是一个小小的问题,如果没有前辈的无私奉献,很难想象我们自己一天能学到多少内容。感谢各位前辈的辛勤付出,让我们少走了很多的弯路!
点个赞再走呗!欢迎留言哦!
还没有评论,来说两句吧...