先晒一张架构图

spring boot2 + dubbo + zookeeper 搭建微服务框架

微服务模块和api网关使用spring boot2 作为基础架构,微服务注册采用zookeeper 

下面开始搭建:

第一步:创建一个父模块(不是必须的,可以不创建,这里为了方便管理)

微服务的每一个模块都是一个独立的程序,因此父模块并不是必须创建的,但是为了方便管理jar包,服务模块,还是创建一个空的父模块。(这里使用idea演示)

(1)file-》new -》project 

spring boot2 + dubbo + zookeeper 搭建微服务框架

 

(2)spring boot2 + dubbo + zookeeper 搭建微服务框架

(3)

spring boot2 + dubbo + zookeeper 搭建微服务框架

(4)清理一下目录结构

spring boot2 + dubbo + zookeeper 搭建微服务框架

第二步:创建api网关模块(消费者)

       api网关在微服务中不是必须的,但是api网关是微服务中一个比较重要的组成部分。api网关统一为其他程序提供api接口,封闭内部微服务的复杂性,使用微服务的开发人员只需要知道api网关提供的接口就可以了,api网关可以统一的提供网络安全,跨域解决,权限认证等。

     dubbo 不像 spring cloud一样有现成的网关模块 (Zuul),因此需要自己开发这个模块,这里api网关模块就作为微服务的消费者(正常情况下也是消费者),以后也行会重新做该模块,因为api网关是整个微服务集群的入口,需要承担很大的压力,因此api网关需要十分稳定,并且需要一定的抗压能力,api网关也最有可能成为性能的瓶颈,还好已经有了不少来源 api gateway 性能都很好,例如 :Kong,apiaxle等

(1)创建spring boot模块(需要springmvc 对外提供服务接口)

右键项目 new - 》 Module -》 (使用 spring 官网提供的脚手架创建spring boot项目即可)

spring boot2 + dubbo + zookeeper 搭建微服务框架

 

(2)填写模块信息

spring boot2 + dubbo + zookeeper 搭建微服务框架

(3)添加web依赖(为微服务集群提供Restful 接口 )

也可以添加一些方便restful的组件,这里先不添加了,需要以后再加

spring boot2 + dubbo + zookeeper 搭建微服务框架

然后一直点到finish 

(4)清理目录(只是为了整洁)

spring boot2 + dubbo + zookeeper 搭建微服务框架

第三步:添加生产者模块

这里就以用户管理微服务模块为例

同第二步创建api网关一致,只是下面这一步什么都不需要选,接口由api网关提供(mybatis之类的,之后再加,这里只演示dubbo框架搭建流程,如果感觉需要在这里加上mybatis,自己去勾选,spring boot+mybatis 实现 见 https://blog.csdn.net/qq_26462567/article/details/83447895 )

spring boot2 + dubbo + zookeeper 搭建微服务框架

第四步:创建api共有组件(不是必须但是为了接口调用方便,建议创建一个)

api组件负责提供对我服务的接口,每个微服务模块的接口声明都在 改组件中做声明,每个组件都引用该组件,尤其是网关,当调用组件时只需要直接使用该组件中声明的接口就可以了(面向接口),做到一次编程,代码复用。

同理,为了数据流转的方便,实体我们也可以声明一个公用的组件 ,实现每个微服务之间的统一的ORM(并不是建议每个微服务模块之间互相调用,每个微服务之间还是尽量少的互相依赖,api网关除外)。

(1)创建maven组件 

右键项目 new - 》 Module -》

spring boot2 + dubbo + zookeeper 搭建微服务框架

(2)填写组件信息

spring boot2 + dubbo + zookeeper 搭建微服务框架

(3)完成创建

spring boot2 + dubbo + zookeeper 搭建微服务框架

(4)创建接口包

spring boot2 + dubbo + zookeeper 搭建微服务框架

(5)创建测试服务接口

spring boot2 + dubbo + zookeeper 搭建微服务框架

代码如下:

package cn.com.kgo.common.api.service;

/**
 * @author keepgoon
 * @Description: TODO
 * @date 2019/4/2916:59
 */
public interface TestService {
    public String getServiceInfo();
}

第五步:微服务引入api共有组件

api网关模块,用户管理模块 都需要引用该模块(具体引入代码可能和自己声明的组件不同而有变化)

        <dependency>
            <groupId>cn.com.kgo.common.api</groupId>
            <artifactId>common-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

第六步:引用dubbo 和 zookeeper 依赖 

在api网关模块和用户管理模块中引用即可,api公用组件不需要引用 

        <!--分布式依赖 开始-->

        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.101tec/zkclient -->
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.11</version>
        </dependency>
        <!--分布式依赖 结束-->
dubbo-spring-boot-starter 在github上有中文文档说明 https://github.com/alibaba/dubbo-spring-boot-starter/blob/master/README_zh.md

首先,集成dubbo和spring boot 不只是这一种方式,不使用 dubbo-spring-boot-starter dubbo官网也提供了集成方案,但是使用模块要简单,反正都是阿里提供的。

第七步:zookeeper 安装使用(windows)

(1)下载地址:https://archive.apache.org/dist/zookeeper/

这篇文章写的时候最新版本是3.4.14 下载最新版本即可spring boot2 + dubbo + zookeeper 搭建微服务框架

(2)下载完解压目录如下

spring boot2 + dubbo + zookeeper 搭建微服务框架

(3)配置zookeeper 

在conf目录下 找到文件 zoo_sample.cfg ,修改为 zoo.cfg,就可以使用了(不需要修改什么),具体配置如下:

spring boot2 + dubbo + zookeeper 搭建微服务框架

(4)启动zookeeper

bin 目录下有个zkServer.cmd文件启动即可(需要java环境,建议使用jdk1.8)

第八步:用户管理模块实现testService服务,并配置微服务为生产者

(1)实现testService并提供服务,代码如下:

@Component注解是spring的注解,该服务由spring来管理
@Service 注解是dubbo的注解,spring也有同名的注解,注意一下这里是dubbo的注解,告诉dubbo该服务对外提供服务
TestService接口在api通用组件中声明,该接口会在网关调用该服务时再次使用。
package cn.com.kgo.usermanage.service.impl;

import cn.com.kgo.common.api.service.TestService;
import com.alibaba.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;

/**
 * @author keepgoon
 * @Description: TODO
 * @date 2019/4/2917:20
 */
@Component
@Service
public class TestServiceImpl implements TestService {
    @Override
    public String getServiceInfo() {
        return "这是 用户权限管理服务 测试服务";
    }
}

(2)配置dubbo 生产者

application.properties 可以使用yml,规则就不说了


spring.application.name=keepgoon-usermanage
spring.dubbo.server=true
spring.dubbo.registry=zookeeper://localhost:2181

spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20882


spring.dubbo.registry=zookeeper://localhost:2181 表示使用zookeeper,并不一定是zookeeper 

spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20882
如果是单个生产者可以不用配置,name默认为 dubbo , 端口默认为20880

(3)声明dubbo配置生效 

spring boot启动类中添加注解@EnableDubboConfiguration 

package cn.com.kgo.usermanage;

import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableDubboConfiguration
public class UsermanageApplication {

    public static void main(String[] args) {
        SpringApplication.run(UsermanageApplication.class, args);
    }

}

 

第九步:实现api网关消费者,并暴露服务

(1)同上 ,在 api网关的spring boot启动类中添加注解@EnableDubboConfiguration 

  (2) 配置为消费者


spring.application.name=keepgoon-gateway
spring.dubbo.registry=zookeeper://localhost:2181

server.port=8866

(3)使用服务并暴露接口

package cn.com.kgo.gateway.controller;

import cn.com.kgo.common.api.service.TestService;
import com.alibaba.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author keepgoon
 * @Description: TODO
 * @date 2019/4/2917:37
 */
@RestController
public class TestController {
    @Reference
    private TestService testService;
    @RequestMapping("/")
    public String getInfo(){
        return testService.getServiceInfo();
    }
}

最后 

运行结果如下

spring boot2 + dubbo + zookeeper 搭建微服务框架

坑 :

        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.11</version>
        </dependency>

这里使zookeeper 要放到spring boot start 后面,要不然会包 logback的错误

这里是一个更加完整的实例,声明了三个生产者,一个api网关消费者,两个模块 api 模块和实体模块 

https://gitee.com/under_the_sky/keepgoonDubbo/releases

本次代码 : https://download.csdn.net/download/qq_26462567/11151862

 

 

相关文章: