• 快速构建基本的SpringCloud微服务


    前言

    昨天咱们玩玩了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项目为例。

    在这里插入图片描述

    导入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. 导入依赖
     
                com.alibaba.cloud
                spring-cloud-starter-alibaba-nacos-discovery
    
    
    • 1
    • 2
    • 3
    • 4
    1. 进入配置
      在这里插入图片描述
    2. 开启注解
      在这里插入图片描述

    接下来我们测试一下,启动所有服务。

    在这里插入图片描述

    可以看到服务正常

    OpenFeign

    这个也是一样的老规矩,导入依赖

            
                org.springframework.cloud
                spring-cloud-starter-openfeign
            
    
    • 1
    • 2
    • 3
    • 4

    我这里之所以不写版本号,是因为我的父工程只是做了聚合管理,所有的子工程在创建的使用其父都是SpringCloud,它里面做了版本管理
    在这里插入图片描述
    2. 编写调用接口

    这里的话其实有很多种方法,这里演示最简单的方法去使用,其实我更想做的是集成到comment里面,因为毕竟是作为一个公共组件嘛,但是我又不想出现上帝组件,就先这凑合吧。

    在这里插入图片描述
    我这边创建了一个包
    在这里插入图片描述
    我这里演示的是调用blog模块。

    在这里插入图片描述
    之后是调用,这个也简单:

        @Autowired
        BlogFeignService blogFeignService;
    
        @RequestMapping("/test")
        public R test(){
            Map<String, Object> map = new HashMap<>();
            R list = blogFeignService.list(map);
            return list;
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    配置中心

    上面的ok了接下来就是配置中心了。

    1. 导入依赖:
        
                com.alibaba.cloud
                spring-cloud-starter-alibaba-nacos-config
            
    
    • 1
    • 2
    • 3
    • 4
    1. 编写bootstrap.properties
      这个文件有多大的优先级就不用我说了吧。

    在这里插入图片描述

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

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

    可以看到:
    在这里插入图片描述

    
    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);
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    我在配置文件当中写了一个配置
    在这里插入图片描述
    然后用@Value读取了。

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

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

    之后我去nacos配置中心配置一个新的配置文件
    在这里插入图片描述

    访问测试页面成功访问我这边的配置。
    在这里插入图片描述

    这里的话,Nacos就差不多了,我这里只是演示,实际怎么配的看你自己,我这里也只是演示罢了。像什么分组呀,命名空间,配置隔离神马神马的看你的业务了。

    网关

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

    1. 导入依赖
            
                org.springframework.cloud
                spring-cloud-starter-gateway
            
    
    • 1
    • 2
    • 3
    • 4

    这里的话,我只直接在网关服务里面导入了。因为这边网关只有一个嘛。

    然后这个玩意啥都不用干,直接导入配置就ok了。

    在这里插入图片描述

    
    
    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
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73

    然后我们测试一下,现在我在启动两个服务。
    在这里插入图片描述
    然后去通过网关访问:

    在这里插入图片描述
    一切正常,当然我这里还没有写入数据所以啥都没有。至此,一个非常简单的分布式项目就完成了基本的创建。

  • 相关阅读:
    垃圾图像识别易语言代码
    webRtc架构与目录结构
    手把手QQ机器人制作教程,根据官方接口进行开发,基于Python语言制作的详细教程(更新中,已经更新 10课 / 30 课)
    GP规范--STORE DATA
    操作系统·进程管理
    Java while循环语句使用详解说明
    【开源电路】STM32F401RCT6开发板
    强化学习(1)基本概念与Q-learning模型的python简单实现
    JavaScript 67 JavaScript HTML DOM 67.13 JavaScript HTML DOM 集合
    失效的访问控制及漏洞复现
  • 原文地址:https://blog.csdn.net/FUTEROX/article/details/126879940