zoukankan      html  css  js  c++  java
  • 20200523 尚硅谷2020最新版SpringCloud【笔记】4

    17.SpringCloud Alibaba入门简介

    why会出现SpringCloud alibaba

    Spring Cloud Netflix项目进入 维护模式

    https://spring.io/blog/2018/12/12/spring-cloud-greenwich-rc1-available-now

    The following Spring Cloud Netflix modules and corresponding starters will be placed into maintenance mode:
    
    1. spring-cloud-netflix-archaius
    2. spring-cloud-netflix-hystrix-contract
    3. spring-cloud-netflix-hystrix-dashboard
    4. spring-cloud-netflix-hystrix-stream
    5. spring-cloud-netflix-hystrix
    6. spring-cloud-netflix-ribbon
    7. spring-cloud-netflix-turbine-stream
    8. spring-cloud-netflix-turbine
    9. spring-cloud-netflix-zuul
    
    Current Replacement
    Hystrix Resilience4j
    Hystrix Dashboard / Turbine Micrometer + Monitoring System
    Ribbon Spring Cloud Loadbalancer
    Zuul 1 Spring Cloud Gateway
    Archaius 1 Spring Boot external config + Spring Cloud Config

    SpringCloud alibaba带来了什么?

    是什么

    https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md

    能干嘛

    服务限流降級:默认支持 Servlet、Feign、Resttemplate、Dubo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降級 Metrics 监控。

    服务注册与发现:适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。

    分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新。

    消息驱动能力:基于 Spring Cloud Stream 为微服务应用构建消息驱动能力。

    阿里云对象存储:阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访可任意类型的数据。

    分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker(schedulerx-client)上执行。

    SpringCloud alibaba学习资料获取

    Spring 官网

    GitHub 地址

    Spring 官网文档

    GitHub 中文

    18.SpringCloud Alibaba Nacos服务注册和配置中心

    Nacos简介

    为什么叫Nacos

    Naco 分别为 Naming 和 Configuration 的前两个字母,最后的 s 为 Service

    是什么

    一个更易于构建云原生应用的动态服务发现,配置管理和服务管理中心

    Nacos:Dynamic Naming and Configuration Service

    Nacos就是注册中心+配置中心的组合

    Nacos = Eureka+Config+Bus

    能干嘛

    替代Eureka做服务注册中心

    替代Config做服务配置中心

    去哪下

    GitHub

    Nacos 官网文档

    Spring 官方文档

    各种注册中心比较

    服务注册与发现框架 CAP模型 控制台管理 社区活跃度
    Eureka AP 支持 低(2.x版本闭源)
    Zookeeper CP 不支持
    Consul CP 支持
    Nacos AP 支持

    据说 Nacos 在阿里巴巴内部有超过10万的实例运行,已经过了类似双十ー等各种大型流量的考验

    安装并运行Nacos

    1. 本地Java8+Maven环境已经OK

    2. 先从官网下载Nacos

      https://github.com/alibaba/nacos/releases

    3. 解压安装包,直接运行bin目录下的startup.cmd

    4. 命令运行成功后直接访问 http://localhost:8848/nacos

      默认账号密码都是nacos

    Nacos作为服务注册中心演示

    基于Nacos的服务提供者

    1. Module,cloudalibaba-provider-payment9001

    2. POM

      <dependency>
          <groupId>com.alibaba.cloud</groupId>
          <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
      </dependency>
      
    3. YML

      spring:
        application:
          name: nacos-payment-provider
        cloud:
          nacos:
            discovery:
              server-addr: localhost:8848 #配置Nacos地址
      
    4. 主启动类,添加注解 @EnableDiscoveryClient

    5. 业务类

      @RestController
      public class PaymentController {
          @Value("${server.port}")
          private String serverPort;
      
          @GetMapping(value = "/payment/nacos/{id}")
          public String getPayment(@PathVariable("id") Integer id) {
              return "nacos registry, serverPort: " + serverPort + "	 id" + id;
          }
      }
      
    6. 测试

      1. 访问服务接口 http://localhost:9001/payment/nacos/1
      2. 查看 Nacos 控制台,服务列表
    7. 为了演示负载均衡,复制 cloudalibaba-provider-payment9001 为 cloudalibaba-provider-payment9002

    IDEA 拷贝配置作为集群

    Services 窗口里,右键微服务,Copy Configuration,配置 VM Options,-Dserver.port=9011,启动 Copy 的微服务,测试 Copy 的微服务

    基于Nacos的服务消费者

    1. Module,cloudalibaba-consumer-nacos-order83

    2. POM,同上

    3. YML

      spring:
        application:
          name: nacos-order-consumer
        cloud:
          nacos:
            discovery:
              server-addr: localhost:8848
      
      
      #消费者将要去访问的微服务名称(注册成功进nacos的微服务提供者)
      service-url:
        nacos-user-service: http://nacos-payment-provider
      
    4. 主启动类,添加注解 @EnableDiscoveryClient

    5. 业务类

      public class OrderNacosController {
          @Resource
          private RestTemplate restTemplate;
      
          @Value("${service-url.nacos-user-service}")
          private String serverURL;
      
          @GetMapping(value = "/consumer/payment/nacos/{id}")
          public String paymentInfo(@PathVariable("id") Long id) {
              return restTemplate.getForObject(serverURL + "/payment/nacos/" + id, String.class);
          }
      
      }
      
    6. 测试

      1. 查看 Nacos 控制台,服务列表

      2. 访问服务接口 http://localhost:83/consumer/payment/nacos/13

        83访问9001/9002,轮询负载OK

    服务注册中心对比

    Nacos 生态图

    nacos_landscape.png

    Nacos和CAP

    Nacos 支持 AP 和 CP 模式的切换

    C是所有节点在同一时间看到的数据是一致的;而A的定义是所有的请求都会收到响应。

    何时选择使用何种模式?

    一般来说,如果不需要存储服务级別的信息且服务实例是通过 nacos- client 注册,并能够保持心跳上报,那么就可以选择AP模式。当前主流的服务如 Spring cloud 和 Dubbo 服务,都适用于AP模式,AP模式为了服务的可能性而减弱了一致性,因此AP模式下只支持注册临时实例。

    如果需要在服务级别编辑或者存储配置信息,那么CP是必须,K8S服务和DNS服务则适用于CP模式。CP模式下则支持注册持久化实例,此时则是以 Raft 协议为集群运行模式,该模式下注册实例之前必须先注册服务,如果服务不存在,则会返回错误。

    curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'
    

    Nacos作为服务配置中心演示

    Nacos作为配置中心-基础配置

    1. Module,cloudalibaba-config-nacos-client3377

    2. POM

      <!--nacos-config-->
      <dependency>
          <groupId>com.alibaba.cloud</groupId>
          <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
      </dependency>
      <!--nacos-discovery-->
      <dependency>
          <groupId>com.alibaba.cloud</groupId>
          <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
      </dependency>
      
    3. YML

      1. bootstrap.yml

        spring:
          application:
            name: nacos-config-client
          cloud:
            nacos:
              discovery:
                server-addr: localhost:8848 #Nacos服务注册中心地址
              config:
                server-addr: localhost:8848 #Nacos作为配置中心地址
                file-extension: yaml #指定yaml格式的配置
        
      2. application.yml

        spring:
          profiles:
            active: dev # 表示开发环境
        
    4. 主启动类,添加注解 @EnableDiscoveryClient

    5. 业务类,添加注解 @RefreshScope,支持自动刷新

      @RestController
      @RefreshScope //支持Nacos的动态刷新功能。
      public class ConfigClientController {
          @Value("${config.info}")
          private String configInfo;
      
          @GetMapping("/config/info")
          public String getConfigInfo() {
              return configInfo;
          }
      }
      
    6. 在 Nacos 中添加配置,nacos-config-client-dev.yaml,内容为

      config:
          info: nacos config center,version = 2 from nacos config center, nacos-config-client-dev.yaml, version=3
      
    7. 测试

      1. 访问 http://localhost:3377/config/info
      2. 修改配置后,重新调用,测试自动刷新

    Nacos作为配置中心-分类配置

    Nacos 数据模型 Key 由三元组唯一确定, Namespace默认是空串,公共命名空间(public),分组默认是 DEFAULT_GROUP。

    Namespace + Group + Data ID
    

    nacos_data_model

    DataID 方案

    指定 spring.profile.active 和配置文件的 DataID 来使不同环境下读取不同的配置

    ## Nacos 配置文件名称规则
    ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
    
    Group 方案

    bootstrap.yml 中指定 spring.cloud.nacos.config.group,对应 Nacos 中的 Group

    Namespace 方案

    bootstrap.yml 中指定 spring.cloud.nacos.config.namespace,对应 Nacos 中的 Namespace 的 ID。

    Nacos集群和持久化配置(重要)

    集群部署说明

    部署手册

    Nacos持久化配置解释

    Nacos 默认自带的是嵌入式数据库 derby

    支持 Mysql

    derby到mysql切换配置步骤
    1. 安装数据库,版本要求:5.6.5+

    2. 初始化mysql数据库,数据库初始化文件:nacos-mysql.sql

    3. 修改 conf/application.properties 文件,增加支持 mysql 数据源配置(目前只支持 mysql),添加 mysql 数据源的 url、用户名和密码

      spring.datasource.platform=mysql
      
      db.num=1
      db.url.0=jdbc:mysql://11.162.196.16:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
      db.user=nacos_devtest
      db.password=youdontknow
      

    Docker 版Nacos+MySQL生产环境配置

    预计需要,1个nginx + 3个nacos注册中心 + 1个mysql

    视频中使用的方法是安装到 Linux 上,我使用 Docker

    Docker Hub

    Nginx

    Nacos nacos-docker GitHub

    ## 拉取镜像
    docker pull nginx
    docker pull nacos/nacos-server
    
    ## 运行容器
    ### MySQL 5.7
    docker run --name mysql5 -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -d mysql:5.7
    
    ### Nginx
    docker volume create nginx
    docker run --name nginx -d -p 8888:80 -v nginx:/etc/nginx nginx
    
    安装 Nacos 集群

    Nacos Docker集群部署

    1. 安装 git

      yum -y install git
      
      git --version
      
    2. 安装 docker-compose

      curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
      

      速度太慢,使用迅雷下载

      https://github.com/docker/compose/releases/download/1.24.1/docker-compose-Linux-x86_64
      

      为命令赋权

      chmod +x /usr/local/bin/docker-compose
      
      docker-compose --version
      
    3. 从 git 上下载 nacos-docker 项目,本地目录为 /opt/nacos-docker

      git clone https://github.com/nacos-group/nacos-docker.git /opt/nacos-docker
      
    4. 修改内存大小,在 env/nacos-hostname.env 中加入内存配置

      因为虚拟机内存不够,所以需要修改内存配置

      JVM_XMS=256M
      JVM_XMX=256M
      JVM_XMN=256M
      
    5. 安装 Nacos 集群

      docker-compose -f example/cluster-hostname.yaml up
      

      这种安装方式,自动安装成集群,数据存储在 Docker 中的 MySQL 内,详细信息参考 example/cluster-hostname.yamlenv/nacos-hostname.env

      集群访问路径为

      http://192.168.181.128:8848/nacos
      http://192.168.181.128:8849/nacos
      http://192.168.181.128:8850/nacos
      
    6. 停止、启动 Nacos 集群

      ## 停止 
      docker-compose -f ./example/cluster-hostname.yaml stop
      
      ## 启动 
      docker-compose -f ./example/cluster-hostname.yaml start
      
    配置 Nginx

    修改 /var/lib/docker/volumes/nginx/_data/nginx.conf,在其中添加 $upstream_addr,日志输出中会带上被代理的地址

        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"'
                          ' -- $upstream_addr';
    

    修改 /var/lib/docker/volumes/nginx/_data/conf.d/default.conf

    upstream cluster {
      # IP 哈希,默认为轮询
      ip_hash;
      server 192.168.181.128:8848;
      server 192.168.181.128:8849;
      server 192.168.181.128:8850;
    }
    
    server {
        listen       80;
        server_name  localhost;
    
        location / {
            # root   /usr/share/nginx/html;
            # index  index.html index.htm;
            proxy_pass http://cluster;
        }
    }
    

    暴露的访问路径为

    http://192.168.181.128:8888/nacos
    
    测试 Nacos 集群
    1. 访问并登录 http://192.168.181.128:8888/nacos,查看 Nginx 日志

      docker logs -f nginx
      
    2. 查看 Nacos 中的【节点列表】,此时应该有一主二从,共三个节点

    3. 测试高可用

      1. 微服务 cloudalibaba-provider-payment9002、cloudalibaba-consumer-nacos-order83 启动注册进nacos集群

        spring.cloud.nacos.discovery.server-addr: 192.168.181.128:8888
        
      2. 启动微服务并查看 Nacos 中的【服务列表】,存在两个服务

      3. 访问消费者服务,http://localhost:83/consumer/payment/nacos/13,返回正常

      4. 测试启动、停止 Nacos 容器,不影响服务使用

  • 相关阅读:
    二维数组的最大联通子数组
    四则运算网页终结版
    Python+Selenium进阶版(四)-封装一个自己的类-浏览器引擎类
    Python+Selenium进阶版(三)- 二次封装Selenium中几个方法
    Python+Selenium进阶版(二)- Python中类/函数/模块的简单介绍
    Python+Selenium进阶版 (一)- Python IDE工具-PyCharm的安装和使用
    Python+Selenium学习-Xpat增强梳理版
    Python+Selenium练习(三十一)- 截图并保存
    Python+Selenium练习(三十)- 获取页面元素的href属性
    Python+Selenium练习(二十九)- 获取当前页面全部图片信息
  • 原文地址:https://www.cnblogs.com/huangwenjie/p/12942401.html
Copyright © 2011-2022 走看看