说明:Springboot整合Dubbo完成分布式服务注册,笔者以调用订单信息时调用查询用户地址信息为例。
开发工具 Idea
父项目:springboot-dubbo-interface
提供者:springboot-dubbo-provider
消费者:springboot-dubbo-consumer
一、父项目:springboot-dubbo-interface
1.pom依赖
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>
2.UserAddress.java 公共实体类【网络传输对象】
@Data @AllArgsConstructor @NoArgsConstructor public class UserAddress implements Serializable { private Integer id; private String userAddress; private String userId; }
3.UserService.java/OrderService.java 两个公共接口
public interface OrderService { //查询订单,调用用户地址服务,返回用户地址 public List<UserAddress> initOrder(String userId); } ------------------------------------------------------ public interface UserService { /*查询用户所有的地址*/ public List<UserAddress> queryAllAddress(String userId); }
二、提供者:springboot-dubbo-provider
1.pom依赖
<dependencies> <!--继承父项目--> <dependency> <groupId>com.wang</groupId> <artifactId>springboot-dubbo-interface</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <!--apache dubbo--> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.3</version> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-dependencies-zookeeper</artifactId> <version>2.7.3</version> <type>pom</type> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> </dependencies>
2.application.properties
# 1. application name dubbo.application.name=springboot-service-provider # 2. dubbo:registry address dubbo.registry.address=zookeeper://127.0.0.1:2181 # 3. dubbo:protocol dubbo.protocol.name=dubbo dubbo.protocol.port=20880 ### 说明: 可以新建一个dubbo.properties 把上面的配置复制进去也可以。
3.UserServiceImpl.java 服务提供实现类
import com.wang.springboot.domain.UserAddress; import com.wang.springboot.service.UserService; import org.apache.dubbo.config.annotation.Service; import java.util.ArrayList; import java.util.List; /** * @author 王一宁 * @date 2020/3/28 17:58 */ @Service public class UserServiceImpl implements UserService { private static List<UserAddress> address = new ArrayList<UserAddress>(); static { UserAddress userAddress = new UserAddress(1, "廊坊市固安县", "whsxt"); address.add(userAddress); } /*模拟查询数据库*/ @Override public List<UserAddress> queryAllAddress(String userId) { return address; } }
4.启动类上记得加上 @EnableDubbo //启用dubbo
三、消费者:springboot-dubbo-consumer
1.pom
<dependencies> <!--父项目的依赖--> <dependency> <groupId>com.wang</groupId> <artifactId>springboot-dubbo-interface</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <!--apache dubbo--> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.3</version> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-dependencies-zookeeper</artifactId> <version>2.7.3</version> <type>pom</type> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
2.application.properties
# 1.appname dubbo.application.name=springboot-service-consumer # 2.address dubbo.registry.address=zookeeper://127.0.0.1:2181
3.OrderServiceImpl.java 消费者实现类
import com.wang.springboot.domain.UserAddress; import com.wang.springboot.service.OrderService; import com.wang.springboot.service.UserService; import org.apache.dubbo.config.annotation.Reference; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; /** * @author 王一宁 * @date 2020/3/28 11:03 */ @Service public class OrderServiceImpl implements OrderService { @Reference private UserService userService; /*查询所有的订单中调用用户查询地址的api接口*/ @Override public List<UserAddress> initOrder(String userId) { return userService.queryAllAddress(userId); } }
4.OrderController.java 这个是个web项目,用来体验结果
@RestController @RequestMapping("/order") public class OrderController { @Autowired private OrderService orderService; @RequestMapping("/initOrder") public List<UserAddress> initOrder(String userId){ return this.orderService.initOrder(userId); } }
四、开启你的zookeeper、dubbo-admin
1.启动 生产者项目
2.启动 消费者项目
3.可以在bubbo的web查看服务状态
http://127.0.0.1:7001/
4.访问自己的服务
http://localhost:8080/order/initOrder?userId=wang 返回结果: [{"id":1,"userAddress":"廊坊市固安县","userId":"whsxt"}]