Spring Cloud Alibaba实战之一:项目搭建

目录

Spring Cloud Alibaba简介

背景

1、单体应用的痛点

2、微服务的优势

重要组件

工程搭建

1、搭建父工程

2、引入相关springcloud依赖

3、创建子模块

4、将服务注册到nacos

4.1、引入nacos依赖

4.2、创建application.yml配置文件和启动类并引入nacos​编辑

4.3、启动项目:

5、nacos配置中心

5.1、添加配置中心依赖

5.2、创建bootstrap.properties配置文件

5.3、新建名称空间

5.4、在nacos平台上创建配置文件映射相关

5.5、启动项目测试

5.6、 @RefreshScope注解 配置动态刷新

总结


Spring Cloud Alibaba简介

背景

1、单体应用的痛点

传统的单体应用,将所有功能的表示层、业务逻辑层,数据访问层,包括静态资源等等全部糅合在一个工程里面,编译,打包,部署在单台服务器上上线,比如打成war包放在Tomcat的webapp目录中部署项目。这样的项目开发部署适合小型项目,系统功能不复杂,访问量不大的情况下有绝对的优势。开发速度快,运维方便。但是当业务越来越复杂,功能越来越多,参与的开发人员越来越多,就暴露出问题了。

比如:
业务变复杂,代码量增大,代码可读性,可维护性,可扩展性下降。万一要新同事接手代码,理解起来花很多时间
测试难度增大
单体应用并发能力有限,访问量高了用户体验差
单体应用容错率低,万一哪里出错,可能导致整个项目就崩了

2、微服务的优势

将原来的单体应用按义务范围来进行划分,划分为多个小model,每个微服务运行在自己的进程中,不相互影响,通过完全自动化部署来独立部署。并使用轻量级机制通信,通常是HTTP RESTUFUL API。可对各个微服务进行集中管理。这些小model可以使用不同的编程语言,以及不同的存储技术。

重要组件

nacos:注册中心(服务注册与发现)、配置中心(动态配置管理)
Ribbon:负载均衡
Feign:声明式Http客户端(调用远程服务)
Sentinel:服务容错(限流、降级、熔断)
Gateway:API网关(webflux编程模式)
Sleuth:调用链监控
Seata:原Fescar,即分布式事务解决方案


工程搭建

1、搭建父工程

给项目起个名字就叫做’spring-cloud-alibaba-shop’ ,并删除掉src目录(父目录不需要)

Spring Cloud Alibaba实战之一:项目搭建_第1张图片

 2、引入相关springcloud依赖

引入springboot springcloud spingcloud alibaba 依赖,如下
版本选取:
springboot – 2.6.4
springcloud – 2021.0.1
springcloud alibaba – 2021.0.1.0



    4.0.0

    org.alibabashop
    spring-cloud-alibaba-shop
    pom
    1.0-SNAPSHOT

    
        org.springframework.boot
        spring-boot-starter-parent
        2.6.4
    

    
        8
        8
        2021.0.1
        2021.0.1.0
    

    
        
            org.springframework.boot
            spring-boot-starter
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.cloud
            spring-cloud-dependencies
            ${spring-cloud.version}
            pom
            import
        
        
            com.alibaba.cloud
            spring-cloud-alibaba-dependencies
            ${spring-cloud-alibaba.version}
            pom
            import
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                
                    none     
                    execute    
                
                
                    
                        
                            repackage
                        
                    
                
            
        
    


3、创建子模块

我们模拟创建一个用户模块

Spring Cloud Alibaba实战之一:项目搭建_第2张图片

 4、将服务注册到nacos

有关nacos的安装请参见博主之前的文章:

Windows下Nacos安装

4.1、引入nacos依赖

		
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
            ${spring-cloud-alibaba.version}
        
        

4.2、创建application.yml配置文件和启动类并引入nacos
Spring Cloud Alibaba实战之一:项目搭建_第3张图片

 启动类:

package com.alibabashop.user;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;


@SpringBootApplication
@ComponentScan(basePackages = {"com.alibabashop.*"})
public class ShopUserApplication {
    public static void main(String[] args) {
        SpringApplication.run(ShopUserApplication.class, args);
    }
}

 在application.yml文件中添加nacos相关配置:

server:
  port: 9090

spring:
  application:
    name: mdx-shop-user
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

4.3、启动项目:

Spring Cloud Alibaba实战之一:项目搭建_第4张图片

 已经注册成功,查看nacos服务

Spring Cloud Alibaba实战之一:项目搭建_第5张图片

5、nacos配置中心

我们可以把项目中的一些开关等有可能在线上更改的配置放到nacos的统一配置中心,更改配置不用重新上线下线服务,极大降低成本。

5.1、添加配置中心依赖

		
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-config
            ${spring-cloud-alibaba.version}
        
        
            org.springframework.cloud
            spring-cloud-starter-bootstrap
            3.0.2
        

其中上文在父工程的pom中引入了2个依赖,第一个依赖nacos-config是将nacos作为配置中心使用,第二个依赖starter-bootstrap是从Spring Boot 2.4版本开始,配置文件加载方式进行了重构,否则会出现配置参数无法加载的错误。 

Spring Cloud Alibaba实战之一:项目搭建_第6张图片

 5.2、创建bootstrap.properties配置文件

bootstrap文件会在项目启动后第一个被加载,在配置文件中添加如下配置:
server-addr:nacos地址
extension-configs: 扩展配置,支持配置多个配置文件
data-id: 配置文件的文件名称加后缀
group:配置文件的组,默认是DEFAULT_GROUP
refresh: 控制该 Data Id 在配置变更时,是否支持应用中可动态刷新, 感知到最新的配置值。默认是不支持的。
file-extension: 配置内容的数据格式,配置文件的格式,一般为properties 和 yaml
namespace: 命名空间

spring.application.name=shop-user
spring.cloud.nacos.config.server-addr=localhost:8848
spring.cloud.nacos.config.extension-configs[0].data-id=shop-user.yaml
spring.cloud.nacos.config.extension-configs[0].group=shop
spring.cloud.nacos.config.extension-configs[0].refresh=true
spring.cloud.nacos.config.file-extension=yml
spring.cloud.nacos.config.namespace=alibaba
spring.cloud.nacos.config.group=shop

5.3、新建名称空间

 新建一个命名空间(与上文的配置一样,alibaba),可以将服务注册到这个命名空间下,这样方便方便在多人写作团队进行管理: 

Spring Cloud Alibaba实战之一:项目搭建_第7张图片

5.4、在nacos平台上创建配置文件映射相关

在alibaba命名空间下新建配置

Spring Cloud Alibaba实战之一:项目搭建_第8张图片

dataId和group要和配置文件对应,我们增加一个测试配置,然后发布.

Spring Cloud Alibaba实战之一:项目搭建_第9张图片

Spring Cloud Alibaba实战之一:项目搭建_第10张图片

 5.5、启动项目测试

新建一个HelloWordController作为测试接口,该接口中获取shop-user.test.userId 配置参数的值,在利用nacos的配置中心之前,改参数一般在本地的property文件中配置,通过注解获取,下文我们将通过nacos的配置文件获取。

package com.alibabashop.user.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/user")
public class HelloWordController {

    @Value("${shop-user.test.userId}")
    private String userId;

    @GetMapping("getUserConfigTest")
    public String getUserConfigTest(){
        return userId != null ? userId : "未获取到配置";
    }
}

再次启动项目

Spring Cloud Alibaba实战之一:项目搭建_第11张图片

 访问浏览器测试 http://localhost:9090/user/getUserConfigTest

 成功访问到配置。

5.6、 @RefreshScope注解 配置动态刷新

SpringCloud新增了一个自定义的作用域:refresh(可以理解为“动态刷新”),同样用了一种独特的方式改变了Bean的管理方式,使得其可以通过外部化配置(.properties)的刷新,在应用不需要重启的情况下热加载新的外部化配置的值。

本次在HelloWordController类上增加@RefreshScope注解,重启项目。

package com.alibabashop.user.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RefreshScope
@RequestMapping("/user")
public class HelloWordController {

    @Value("${shop-user.test.userId}")
    private String userId;

    @GetMapping("getUserConfigTest")
    public String getUserConfigTest(){
        return userId != null ? userId : "未获取到配置";
    }
}

先来访问一下这个接口 http://localhost:9090/user/getUserConfigTest
获取到的值为 test12345

然后我们改一下配置中心的配置
将值改为 test7890 然后发布

Spring Cloud Alibaba实战之一:项目搭建_第12张图片

直接浏览器访问网址 http://localhost:9090/user/getUserConfigTest ,成功返回我们新改的配置。

总结

至此,本文搭建springcloud alibaba项目工作就完成了。在本项目的第一阶段,通过在项目中新建一个shop-user的子模块,并引入nacos的配置项,将其作为项目的注册中心和参数配置中心,同时简单了解了nacos在项目开发中的作用。下一篇我们将介绍 springcloud alibaba中另一个组件openfegin的使用。

你可能感兴趣的:(SpringCloud,Alibaba,java,开发语言)