• Spring Cloud Alibaba 的学习之入门篇


    微服务架构概念

    微服务架构是一种架构概念,它的主要作用是将功能分解到离散的各个服务当中,从而降低系统的耦合性,并提供更加灵活的服务支持。

    需要解决的问题:

    • 客户端如何访问这些服务?
    • 每个服务之间如何通信?
    • 如此多的服务,如何管理?
    • 服务挂了,如何解决?(备份方案,应急处理机制)

    Spring Cloud Alibaba

    是什么?

    Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。

    依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。
    (地址:https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md)

    为什么?

    2018 年 12 月 12 日,Netflix 宣布 Spring Cloud Netflix 系列技术栈进入维护模式(不再添加新特性)

    同时

    2018 年 10 月 31 日的凌晨,这个伟大的日子里,Spring Cloud Alibaba 正式入驻了 Spring Cloud 官方孵化器,并在 Maven 中央库发布了第一个版本。
    2019年8月1日,Spring Cloud Alibaba 发布第一个正式版本,顺利完成孵化 在 Alibaba 仓库发布第一个毕业版本

    怎么做?

    毕业前:
    Spring Cloud Greenwich(对应springboot 2.1.x)

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>0.9.0.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
    

    Spring Cloud Finchley(对应springboot 2.0.x)

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>0.2.2.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
    

    毕业后:
    Spring Cloud Greenwich

    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>2.1.0.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
    

    Spring Cloud Finchley

    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>2.0.0.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
    

    针对微服务需要解决的四个问题,解决方案

    Nacos

    是什么?

    Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

    为什么?

    解决那么多服务怎么治理?

    怎么做?

    环境:
    • 64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
    • 64 bit JDK 1.8+
    • Maven 3.2.x+
    下载并安装
    # 下载源码
    git clone https://github.com/alibaba/nacos.git
    
    # 安装到本地仓库
    cd nacos/
    mvn -Prelease-nacos clean install -U
    
    启动
    cd distribution/target/nacos-server-0.7.0/nacos/bin
    
    # Linux
    ./startup.sh -m standalone
    
    # Windows
    startup.cmd
    
    基于Docker安装
    git clone https://github.com/nacos-group/nacos-docker.git
    cd nacos-docker
    单机模式
    
    docker-compose -f example/standalone-mysql.yaml up
    集群模式
    
    docker-compose -f example/cluster-hostname.yaml up 
    
    使用
    1. 添加服务发现依赖
           <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
           </dependency>
    
    1. 添加nacos客户端
    <dependency>
       <groupId>com.alibaba.cloud</groupId>
       <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
    
    1. bootstrap.properties
      (Spring Boot 配置文件的加载顺序,依次为 bootstrap.properties -> bootstrap.yml -> application.properties -> application.yml ,其中 bootstrap.properties 配置为最高优先级)
    # 这里的应用名对应 Nacos Config 中的 Data ID,实际应用名称以配置中心的配置为准
    spring.application.name=nacos-provider-config
    # 指定查找名为 nacos-provider-config.yaml 的配置文件
    spring.cloud.nacos.config.file-extension=yaml
    # Nacos Server 的地址
    spring.cloud.nacos.config.server-addr=192.168.233.150:8848
    
    1. 配置的动态更新,增加一个 user.name 的属性
    spring:
     application:
       name: nacos-provider
     cloud:
       nacos:
         discovery:
           server-addr: 192.168.233.150:8848
    
    server:
     port: 8082
    
    management:
     endpoints:
       web:
         exposure:
           include: "*"
    user:
       name: caps
    
    1. 入口函数添加
      @EnableDiscoveryClient
    2. 修改 Controller ,增加一个请求方法,测试配置更新效果
    // 注入配置文件上下文
    @Autowired
    private ConfigurableApplicationContext applicationContext;
    
    // 从上下文中读取配置
    @GetMapping(value = "/hi")
    public String sayHi() {
        return "Hello " + applicationContext.getEnvironment().getProperty("user.name");
    }
    
  • 相关阅读:
    多线程刷题
    Spring Security的<form>表单的一些细节以及configure(HttpSecurity http)的配置
    Spring Security配置loginPage后,默认的表单登录请求接口也是这个
    一个留了两个星期的bug,基础忘光了
    连接数据库
    反射--笔记(第一篇)
    让图片左右移动
    Java注解
    HTTP协议
    使用servlet连接数据库删除数据
  • 原文地址:https://www.cnblogs.com/faramita/p/11340475.html
Copyright © 2020-2023  润新知