美文网首页
Springboot 2.1.1 + dubbo 最新版整合

Springboot 2.1.1 + dubbo 最新版整合

作者: 暗夜A公爵 | 来源:发表于2018-12-14 10:37 被阅读0次

    1.概述

    Dubbo是Alibaba开源的分布式服务框架,现已捐给apache。它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。

    官网地址:http://dubbo.apache.org/en-us/

    后台管理地址(dubbo-admin):https://github.com/apache/incubator-dubbo-ops

    2.项目构建

    开发环境主要涉及以下几个方面:

    Spring-boot 2.1.1

    JDK 8

    Dubbo

    Zookeeper

    2.1首先安装zookeeper

    window版本一般只需解压即可,正式使用建议使用zookeeper集群,一般最少三台虚拟机。关于zookeeper集群本篇暂略。

    解压之后,修改conf/下的配置文件,zoo.cfg。

    修改data目录与日志目录:

    dataDir=/data/zookeeper-3.4.9/data

    logDir= /data/zookeeper-3.4.9/log

    window下执行zkServer.cmd启动:

    启动后使用ZooInspector工具连接zkserver可以看到下图有一个默认的根接节点:

    image

    2.2 搭建springboot工程:

    可以使用ide或者sts工具自动创建springboot工程,过程不细说,

    服务提供者工程目录:

    image

    服务消费者:

    image

    见pom.xml文件:

    
    <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 http://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.1.1.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
    </parent>
    
    <groupId>com.zhou.test</groupId>
    <artifactId>dubbo-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>dubbo-server</name>
    <description>dubbo-server</description>
    
    <properties>
    <java.version>1.8</java.version>
    </properties>
    
    <dependencies>
    
          <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    
          <!-- dubbo -->
        <dependency>
                <groupId>com.alibaba.boot</groupId>
              <artifactId>dubbo-spring-boot-starter</artifactId>
                <version>0.2.0</version>
            </dependency>
    
            <!-- zookeeper -->
          <dependency>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
                <version>3.4.8</version>
        </dependency>
    
          <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
          </dependency>
    
    </dependencies>
    
    <build>
        <plugins>
            <plugin>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
      </build>
    </project> 
    

    添加接口:

    
    import com.zhou.test.entity.User;
    
    public interface UserService {
          User saveUser(User user);
    }
    

    实现类:

    
    public class UserServiceImpl implements UserService {
    
    @Override
    public User saveUser(User user) {
            user.setId("2");
            System.out.println(user.toString());
            return user;
        }
    }
    

    配置文件:

    
    server.port=8188
    
    ## Dubbo 服务提供者配置
    dubbo.application.name=provider
    dubbo.registry.address=zookeeper://127.0.0.1:2181
    dubbo.protocol.name=dubbo
    dubbo.protocol.port=20880
    dubbo.scan.basePackages=com.zhou.test.service
    

    启动类provider:

    
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    
    public class DubboServerApplication {
    
    public static void main(String[] args) {
    
    SpringApplication.run(DubboServerApplication.class, args);
    
    }
    
    }
    

    启动类consumer 注意消费者这边多一个@EnableDubboConfiguration:

    @SpringBootApplication
    @EnableDubboConfiguration
    public class DubboClientApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(DubboClientApplication.class, args);
        }
    
    }
    

    启动成功后,zookeeper上会有注册成功的provider与consumer,如图:

    image

    服务消费者也一样,调用方代码:

    
    @RequestMapping("/user")
    
    public class UserController {
    
    @Reference(check=false)//启动消费者不检查服务者是否存在
    private UserService userService;
    
        @GetMapping("/save")
        public Object saveUser() {
              User u =new User();
              u.setName("张三");
              u.setSex("男");
            return userService.saveUser(u);
        }
    
    }
    

    测试结果:

    image

    3.踩过的坑

    由于dubbo升级较多,低版本的配置与高版本的配置差别很大,当然配置文件形式(xml格式)已逐渐被注解取代,这样工程简洁,代码也规范。这里列一下,我踩的一些坑。

    使用io.dubbo.springboot搭建的工程,配置文件有些不同:

    
    spring.dubbo.application.name=provider
    
    spring.dubbo.registry.address=zookeeper://127.0.01:2181
    
    spring.dubbo.protocol.name=dubbo
    
    spring.dubbo.protocol.port=20880
    
    spring.dubbo.scan=com.bordrin.service 
    

    使用此版本会使consumer端@Reference 一直为null,从而无法获取注册中心的服务信息。

    建议使用最新版:

    官方案例地址:

    https://github.com/apache/incubator-dubbo-spring-boot-project

    相关文章

      网友评论

          本文标题:Springboot 2.1.1 + dubbo 最新版整合

          本文链接:https://www.haomeiwen.com/subject/hiswhqtx.html