Springboot 2.1.1 + dubbo 最新版整合

2018-12-14  本文已影响0人  暗夜A公爵

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

上一篇下一篇

猜你喜欢

热点阅读