快速构建基本的SpringCloud微服务

Posted Huterox

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速构建基本的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. 导入依赖
 <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
  1. 进入配置
  2. 开启注解

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

可以看到服务正常

OpenFeign

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

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

我这里之所以不写版本号,是因为我的父工程只是做了聚合管理,所有的子工程在创建的使用其父都是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;
    

配置中心

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

  1. 导入依赖:
    <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
  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);
    



我在配置文件当中写了一个配置

然后用@Value读取了。

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

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

之后我去nacos配置中心配置一个新的配置文件

访问测试页面成功访问我这边的配置。

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

网关

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

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

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

然后这个玩意啥都不用干,直接导入配置就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



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

然后去通过网关访问:


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

以上是关于快速构建基本的SpringCloud微服务的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloud基本微服务构建(Eureka+GateWay)

SpringCloud微服务云架构构建B2B2C电子商务平台之-企业分布式微服务云架构构建

Spring Cloud微服务框架介绍

《SpringCloud 从入门到入土 》 第二章:微服务构建:Spring Boot

《SpringCloud 从入门到入土 》 第二章:微服务构建:Spring Boot

基于Spring Cloud的微服务构建学习-2 Spring Boot