全网最透彻!Dubbo 整合 SpringBoot 详解,又通宵了
项目中共用的接口和 POJO 类,代码和之前一样,这里不再展开
3. 服务提供者
工程结构如下
引入依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
需要注意的是,根据 jdk 和 Spring Boot 版本的不同,dubbo-spring-boot-starter 的版本需要有根据的选择
dubbo 提供了 @Service 注解,可将类声明为提供方,省去了大量配置的麻烦
import com.alibaba.dubbo.config.annotation.Service;import com.zang.gmall.bean.UserAddress;import com.zang.gmall.service.UserService;import org.springframework.stereotype.Component;
import java.util.Arrays;import java.util.List;
@Service //属于 Dubbo 的 @Service 注解,非 Spring 作用:暴露服务 @Componentpublic class UserServiceImpl implements UserService {
@Overridepublic List<UserAddress> getUserAddressList(String userId) {//省略}}
通过属性配置的方式设置 application.properties
#当前服务/应用的名字 dubbo.application.name=user-service-provider
#注册中心的协议和地址 dubbo.registry.protocol=zookeeperdubbo.registry.address=127.0.0.1:2181
#通信规则(通信协议和接口)dubbo.protocol.name=dubbodubbo.protocol.port=20880
#连接监控中心 dubbo.monitor.protocol=registry#开启包扫描,可替代 @EnableDubbo 注解 ##dubbo.scan.base-packages=com.zang.gmall
springboot 容器根据配置启动服务提供方,这里需要添加 @EnableDubbo 注解
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;
// 开启基于注解的 dubbo 功能(主要是包扫描 @DubboComponentScan)// 也可以在配置文件中使用 dubbo.scan.base-package 来替代 @EnableDubbo@EnableDubbo
@SpringBootApplicationpublic class UserServiceProviderApplication {
public static void main(String[] args) {SpringApplication.run(UserServiceProviderApplication.class, args);}}
提供方顺利启动
4. 服务消费者
消费者工程在初始化时设置为 web 项目,结构如下
引入和服务提供方同样的依赖,除此之外,添加 springboot web 模块的依赖。
dubbo 提供了 @Reference 注解,可替换 @Autowired 注解,用于引入远程服务
import com.alibaba.dubbo.config.annotation.Reference;import com.zang.gmall.bean.UserAddress;import com.zang.gmall.service.OrderService;import com.zang.gmall.service.UserService;import org.springframework.stereotype.Service;
import java.util.List;
@Servicepublic class OrderServiceImpl implements OrderService {
@ReferenceUserService userService;
@Overridepublic List<UserAddress> initOrder(String userId) {//代码省略}}
配置文件 application.properties
#避免和监控中心端口冲突,设为 8081 端口访问 server.port=8081
评论