• 全网最透彻!Dubbo整合SpringBoot详解,又通宵了


    目前的dubbo已支持和springboot集成,还是之前的例子,这次我们通过springboot容器来实现。借此了解一下基于springboot容器启动的dubbo的配置及使用。

    1. 准备工作

    创建一个Maven空项目,作为项目的父工程,此工程的子项目基于Spring Boot 2.0.5 实现

    全网最透彻!Dubbo整合SpringBoot详解,又通宵了

    在父工程的pom.xml引入之后要创建的子工程

        
            gmall-interface
            user-service-provider
            order-service-consumer
        
    
    • 1
    • 2
    • 3
    • 4
    • 5

    可以提前看一下工程结构

    全网最透彻!Dubbo整合SpringBoot详解,又通宵了

    下面分别来实现子工程:(子工程的实现方式都是在gmall工程下新建Module)

    全网最透彻!Dubbo整合SpringBoot详解,又通宵了

    2. 公共API

    项目中共用的接口和POJO类,代码和之前一样,这里不再展开

    全网最透彻!Dubbo整合SpringBoot详解,又通宵了

    3. 服务提供者

    工程结构如下

    全网最透彻!Dubbo整合SpringBoot详解,又通宵了

    引入依赖

    
            
                com.zang
                gmall-interface
                1.0-SNAPSHOT
            
            
            
                com.alibaba.boot
                dubbo-spring-boot-starter
                0.2.0
            
            
            
                org.springframework.boot
                spring-boot-starter
            
    
            
                org.springframework.boot
                spring-boot-starter-test
                test
            
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    需要注意的是,根据jdk和Spring Boot版本的不同,dubbo-spring-boot-starter的版本需要有根据的选择

    全网最透彻!Dubbo整合SpringBoot详解,又通宵了

    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  作用:暴露服务
    @Component
    public class UserServiceImpl implements UserService {
    
        @Override
        public List getUserAddressList(String userId) {
        //省略
    }}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    通过属性配置的方式设置application.properties

    #当前服务/应用的名字
    dubbo.application.name=user-service-provider
    
    #注册中心的协议和地址
    dubbo.registry.protocol=zookeeper
    dubbo.registry.address=127.0.0.1:2181
    
    #通信规则(通信协议和接口)
    dubbo.protocol.name=dubbo
    dubbo.protocol.port=20880
    
    #连接监控中心
    dubbo.monitor.protocol=registry
    #开启包扫描,可替代 @EnableDubbo 注解
    ##dubbo.scan.base-packages=com.zang.gmall
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    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
    
    @SpringBootApplication
    public class UserServiceProviderApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(UserServiceProviderApplication.class, args);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    提供方顺利启动

    全网最透彻!Dubbo整合SpringBoot详解,又通宵了

    4. 服务消费者

    消费者工程在初始化时设置为web项目,结构如下

    全网最透彻!Dubbo整合SpringBoot详解,又通宵了

    引入和服务提供方同样的依赖,除此之外,添加springboot web模块的依赖。

        
            
                org.springframework.boot
                spring-boot-starter-web
            
    
    • 1
    • 2
    • 3
    • 4
    • 5

    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;
    
    @Service
    public class OrderServiceImpl implements OrderService {
    
        @Reference
        UserService userService;
    
        @Override
        public List initOrder(String userId) {
      //代码省略
       }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    配置文件application.properties

    #避免和监控中心端口冲突,设为8081端口访问
    server.port=8081  
    
    dubbo.application.name=order-service-consumer
    dubbo.registry.address=zookeeper://127.0.0.1:2181
    dubbo.monitor.protocol=registry
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    启动类同样加上@EnableDubbo注解

    import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @EnableDubbo
    @SpringBootApplication
    public class OrderServiceConsumerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(OrderServiceConsumerApplication.class, args);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    为查看调用是否成功,新增控制层用于访问

    import com.zang.gmall.bean.UserAddress;
    import com.zang.gmall.service.OrderService;
    import org.springframework.beans.factory.annotation.Autowired;
    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 OrderController {
    
        @Autowired
        OrderService orderService;
    
        @ResponseBody   //以json格式返回
        @RequestMapping("/initOrder")
        public List initOrder(@RequestParam("uid") String userId){
    
           return orderService.initOrder(userId);
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    5. 测试调用

    启动消费方,在浏览器访问

    全网最透彻!Dubbo整合SpringBoot详解,又通宵了

    调用成功

    全网最透彻!Dubbo整合SpringBoot详解,又通宵了

    附:springboot也允许引用xml文件配置,方法是在启动类中加入如下注解

    //@EnableDubbo
    //引入配置信息
    @ImportResource(locations="classpath:provider.xml")
    @SpringBootApplication
    public class UserServiceProviderApplication {
    //略
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    Spark生产环境高效读写My SQL(df,rdd)
    微信小程序生命周期
    如何清理废弃pv和其对应的文件夹
    大数据发展趋势及动态
    10分钟教你写一个数据库
    strimzi实战之一:简介和准备
    Angular: 为Angular SPA程序添加Authorization支持
    多数互联网人对2021年终奖不抱期待
    鸿蒙开发游戏(二)---大鱼吃小鱼(摇杆控制)
    【强化学习论文合集】AAMAS-2022 | 人工智能CCF-A类会议 (附链接)
  • 原文地址:https://blog.csdn.net/m0_67402235/article/details/126565027