前言

昨天咱们玩玩了renren-generator,单体架构是玩玩了,无非是后边根据你的需求增加其他的组件,完成你的另一种CURD。那么今天咱们在来玩玩分布式,咱们把WhiteHole最根本的后端项目建立起来的分布式架构建立起来。

ok,咱们来开端吧,咱们把最简略的部分建立起来。然后用当时比较便利,干流,高效的计划去做整合。

首要是注册中心,然后装备中心,然后是长途衔接,然后是网关,那么装备注册中心呢,咱们都可以运用Nacos来做,事实上,这个Nacos将会充当更多的功能在本项目当中,长途调用当然还是openfeign,之后是GateWay 网关,那么为什么我要写这篇博文呢,首要是为了水博客,顺便便利自己以后copy装备。

留意这儿是最基础的装备,例如你的ES,分布式事务,权限中心呀,那是和你业务相关的,跟这篇博客没关系,我这是最根本的。

版别

在开端本文之前,我先重申一下我的环境版别,假如你要依照我这来玩,请务必保持和我相同的版别。假如没有依照这个版别来,发生了一些不友好的工作最后的解决计划除了砸电脑,最好的计划或许便是换回我在这儿给出版别,这儿面有许多问题,可是这个挑选咱们这个版别的话。高版别组件可兼容,低版别也能用。

SpringBoot:2.3.2.RELEASE

SpringCloud:Hoxton.SR9

SpringCloudAlibaba:2.2.6.RELEASE

nacos:1.14

注册中心

废话不多说,那么现在咱们第一步需求做到是经过nacos进行微服务注册,这一步其实十分简略,比从前的eureka还要简略。首要导入依靠,我这儿以WhiteHole项目为例。

快速构建基本的SpringCloud微服务

导入nacos依靠,这儿重申一遍便是这儿运用的nacos服务端版别为1.x版别的不是2.x版别的,SpringCloudAlibaba 2.2.6 为分界线,往上为2.x往下为1.x假如你是比这个版别低,你用的nacos服务端必须降低到1.x不然报错。2.x以上版别主张运用docker,由于有额外的权限,端口需求打开,直接运用docker更便利,此外自己电脑为戴尔游匣G5,当时演示系统为win10,经过测验nacos1.4x版别用不了主张运用1.1x这个版别可以运用。

  1. 导入依靠
 <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
  1. 进入装备
    快速构建基本的SpringCloud微服务
  2. 开启注解
    快速构建基本的SpringCloud微服务

接下来咱们测验一下,启动一切服务。

快速构建基本的SpringCloud微服务

可以看到服务正常

OpenFeign

这个也是相同的老规矩,导入依靠

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

我这儿之所以不写版别号,是由于我的父工程仅仅做了聚合办理,一切的子工程在创立的运用其父都是SpringCloud,它里边做了版别办理

快速构建基本的SpringCloud微服务
2. 编写调用接口

这儿的话其实有许多种办法,这儿演示最简略的办法去运用,其实我更想做的是集成到comment里边,由于毕竟是作为一个公共组件嘛,可是我又不想呈现天主组件,就先这将就吧。

快速构建基本的SpringCloud微服务
我这边创立了一个包
快速构建基本的SpringCloud微服务
我这儿演示的是调用blog模块。

快速构建基本的SpringCloud微服务
之后是调用,这个也简略:

    @Autowired
    BlogFeignService blogFeignService;
    @RequestMapping("/test")
    public R test(){
        Map<String, Object> map = new HashMap<>();
        R list = blogFeignService.list(map);
        return list;
    }

装备中心

上面的ok了接下来便是装备中心了。

  1. 导入依靠:
    <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
  1. 编写bootstrap.properties 这个文件有多大的优先级就不必我说了吧。

快速构建基本的SpringCloud微服务

到这儿就完成了,现在咱们验证一下对不对。

现在我在activity的controller服务下面创立了一个test,专门用来测验的。

可以看到:

快速构建基本的SpringCloud微服务


import java.util.HashMap;
import java.util.Map;
@RefreshScope
@RestController
public class Test {
    @Autowired
    BlogFeignService blogFeignService;
    @RequestMapping("/testfeign")
    public R test(){
        Map<String, Object> map = new HashMap<>();
        R list = blogFeignService.list(map);
        return list;
    }
    @Value("${activity.name}")
    private String name;
    @RequestMapping("/testapp")
    public R testapp(){
        return R.ok().put("name",name);
    }
}

我在装备文件当中写了一个装备

快速构建基本的SpringCloud微服务
然后用@Value读取了。

之后这儿留意的是我还打了一个注解 @RefreshScope

这个玩意会帮助咱们动态刷新。

之后我去nacos装备中心装备一个新的装备文件

快速构建基本的SpringCloud微服务

拜访测验页面成功拜访我这边的装备。

快速构建基本的SpringCloud微服务

这儿的话,Nacos就差不多了,我这儿仅仅演示,实践怎样配的看你自己,我这儿也仅仅演示罢了。像什么分组呀,命名空间,装备阻隔神马神马的看你的业务了。

网关

这个也简略,我这儿的话就单纯的做一个转发,首要我已经把我的各个服务都放在nacos服务注册中心,所以的话这边就用GateWay直接做一个转发看看就好了。

  1. 导入依靠
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

这儿的话,我只直接在网关服务里边导入了。由于这边网关只有一个嘛。

然后这个玩意啥都不必干,直接导入装备就ok了。

快速构建基本的SpringCloud微服务


spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        service: gateway
    gateway:
      discovery:
        locator:
          enabled: true
      routes:
        #这儿先做一个根本的服务转发
        - id: activiy8000
          uri: lb://activiy
          predicates:
            - Path=/activiy/**
          filters:
            - StripPrefix=1
        - id: blog8050
          uri: lb://blog
          predicates:
            - Path=/blog/**
          filters:
            #- 转发做拼接,去掉provide后缀,uri/** 而不是 uri/provide/**
            - StripPrefix=1
        # 与之对于的还有 PrefixPath=/Huterox
        #  当拜访 http://localhost:8762/aaa,加上前缀就变成 http://localhost:8762/Huterox/aaa
        - id: community8100
          uri: lb://community
          predicates:
            - Path=/community/**
          filter:
            - StripPrefix=1
        - id: hole8150
          uri: lb://hole
          predicates:
            - Path=/hole/**
          filter:
            - StripPrefix=1
        - id: quiz8200
          uri: lb://quiz
          predicates:
            - Path=/quiz/**
          filter:
            - StripPrefix=1
        - id: user8250
          uri: lb://user
          predicates:
            - Path=/user/**
          filter:
            - StripPrefix=1
  application:
    name: gateway
server:
  port: 88

然后咱们测验一下,现在我在启动两个服务。

快速构建基本的SpringCloud微服务
然后去经过网关拜访:

快速构建基本的SpringCloud微服务
一切正常,当然我这儿还没有写入数据所以啥都没有。至此,一个十分简略的分布式项目就完成了根本的创立。