0
点赞
收藏
分享

微信扫一扫

Springboot 2.x 整合Dubbo 2.6.x和Dubbo 2.7.x

boomwu 2021-09-21 阅读 75

一 、Dubbo 是什么?

二、为什么我要区分 2.6.x 和 2.7.x ?

Dubbo有很长一段时间的发展史,2018年的时候不知道为什么阿里暂更了一年,之后又重新开始更新。之前一直是阿里在维护,后面阿里把它捐给了Apache基金会,由Apache来维护,2.6.x之前,maven中的包名都是alibaba,2.7.0之后包名改成了apache,其中整合入系统中有一些差异;发展史:

三、包依赖区别

  • 2.6.x alibaba


  • 2.7.x apache


四、Dubbo项目的基本结构

Dubbo的原理什么的以及它的组成这里就不扯了,直接说说dubbo的项目结构吧。
基本的Dubbo项目组成分为三个部分:

  • 接口层
  • 服务提供层
  • 服务器消费层

五、实现整合

5.1 接口层

接口层这里自定义了接口,实现部分由服务提供层来实现。建议将model也放在接口层中,接口层中对dubbo没有相关依赖,在这里pom就不提供了。

  • 实例
// vo层
@Data
public class UserVO implements Serializable {
    private Integer id;
    private String  userName;
    private Integer age;
}
// service 接口层
public interface IUserAdminService {
    /**
     * 通过用户id获取用户
     * @param userId
     * @return
     */
    UserVO getUserById(String userId);
}

5.2 服务提供层 2.6.x

  • pom
      ...
    2.6.x
      <!-- 导入接口依赖 -->
      <dependency>
            <groupId>com.martain.dubbo</groupId>
            <artifactId>api</artifactId>
            <version>1.0-SNAPSHOT</version>
      </dependency>
      <!-- duboo -->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>
    2.7.x 
       <!-- dubbo -->
        <!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.4.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.7.4.1</version>
        </dependency>
        <!--zookeeper 注册中心客户端引入 使用的是curator客户端 -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-dependencies-zookeeper</artifactId>
            <version>2.7.4.1</version>
            <type>pom</type>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
  • 服务实现接口
import com.alibaba.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;
import service.IUserAdminService;

@Service  // 注意,这个是dubbo包里面的service,不是spring包里面的
@Component
public class UserAdminService implements IUserAdminService {
    @Override
    public UserVO getUserById(String userId) {
        UserVO userVo = ...
        ...
        return userVo;
    }
}
  • 启动类 Application上添加注解
@SpringBootApplication
@EnableDubbo
@MapperScan(basePackages = "com.jhunicom.community.model.mapper")
public class ServerApplication {

    public static void main(String[] args) {
        //如果不需要是web项目
        new SpringApplicationBuilder(ServerApplication.class)
                //非web应用
                .web(WebApplicationType.NONE)
                .run(args);
//       如果是web应用
//        SpringApplication.run(ServerApplication.class,args);
    }
}
  • 配置文件中配置
dubbo:
  application:
    name: dubbo-producer  #dubbo的注册的服务名, 唯一性
    version: 1.0.0  # 服务提供的版本
  registry:
    address: zookeeper://127.0.0.1:2181  # 注册中心的地址
  protocol:
    #协议名称
    name: dubbo
    #服务暴露端口
    port: 20880
  scan:  
    base-packages: com.martain.dubbo.server.service # 接口实现类的包名

5.3 消费者层

  • pom
        2.6.x
      <!-- 导入接口依赖 -->
      <dependency>
            <groupId>com.martain.dubbo</groupId>
            <artifactId>api</artifactId>
            <version>1.0-SNAPSHOT</version>
      </dependency>
      <!-- duboo -->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>
        2.7.x 
       <!-- dubbo -->
        <!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.4.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.7.4.1</version>
        </dependency>
        <!--zookeeper 注册中心客户端引入 使用的是curator客户端 -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-dependencies-zookeeper</artifactId>
            <version>2.7.4.1</version>
            <type>pom</type>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
  • 远程调用服务
import com.alibaba.dubbo.config.annotation.Reference;
import service.IUserAdminService;
@RestController
public class TestController {
    @Reference  // 使用该注解,dubbo会自动到注册中心寻找服务提供者
    IUserAdminService userAdminService;
    @GetMapping("/user/{userId}")
    public Result getUserById(@PathVariable String userId){
        UserVO userVo = userAdminService.getUserById(userId);
        ...
  • 启动类中添加 @EnableDubbo 注解
@EnableDubbo
@SpringBootApplication
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }
}
  • 配置文件
dubbo:
  application:
    name: dubbo-consumer  #dubbo的注册的服务名, 唯一性
    version: 1.0.0       # 版本号
  registry:
    address: zookeeper://127.0.0.1:2181 # 配置注册中心

示例源码(待补充)

举报

相关推荐

0 条评论