1、SpringCloud Alibaba入门简介

1、why会出现SpringCloud alibaba

  • Spring Cloud Netflix项目进入维护模式
  • SpringCloud NetFlix Projects Entering Maintenance Mode

    2、SpringCloud alibaba带来了什么?

    1、是什么

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

    2、能干嘛

  • 服务限流降级:默认支持 WebServlet、WebFlux, OpenFeign、RestTemplate、Spring Cloud Gateway, Zuul, Dubbo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。

  • 服务注册与发现:适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。
  • 分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新。
  • 消息驱动能力:基于 Spring Cloud Stream 为微服务应用构建消息驱动能力。
  • 分布式事务:使用 @GlobalTransactional 注解, 高效并且对业务零侵入地解决分布式事务问题。
  • 阿里云对象存储:阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。
  • 分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker(schedulerx-client)上执行。
  • 阿里云短信服务:覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。

    3、怎么玩

  • Sentinel:把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

  • Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
  • RocketMQ:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。
  • Dubbo:Apache Dubbo™ 是一款高性能 Java RPC 框架。
  • Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。
  • Alibaba Cloud OSS: 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。
  • Alibaba Cloud SchedulerX: 阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。
  • Alibaba Cloud SMS: 覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。

3、SpringCloud alibaba学习资料获取

1、官网

https://spring.io/projects/spring-cloud-alibaba#overview

2、英文

  • https://github.com/alibaba/spring-cloud-alibaba
  • https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html

    3、中文

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

    2、SpringCloud Alibaba Nacos服务注册和配置中心

    1、Nacos简介

    1、为什么叫Nacos

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

    2、是什么

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

  • Nacos:Dynamic Naming and Configuration Service
  • Nacos就是注册中心+配置中心的组合

    • 等价于Nacos = Eureka+Config+Bus

      3、能干嘛

  • 替代Eureka做服务注册中心

  • 替代Config做服务配置中心

    4、去哪下

  • https://github.com/alibaba/Nacos

  • 官网文档

  • 本地Java8+Maven环境已经OK

  • 先从官网下载Nacos
  • 解压安装包,直接运行bin目录下的
    • window:startup.cmd
    • mac:startup.sh -m standalone
  • 命令运行成功后直接访问http://localhost:8848/nacos
    • 默认账号密码都是nacos
  • image.png

    3、Nacos作为服务注册中心演示

    1、基于Nacos的服务提供者创建cloudalibaba-provider-payment9001

    1、修改pom

    1. <!--spring cloud alibaba 2.1.0.RELEASE-->
    2. <dependency>
    3. <groupId>com.alibaba.cloud</groupId>
    4. <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    5. <version>2.1.0.RELEASE</version>
    6. <type>pom</type>
    7. <scope>import</scope>
    8. </dependency>
  • <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <parent>
          <artifactId>cloud2020</artifactId>
          <groupId>com.daijunyi</groupId>
          <version>1.0-SNAPSHOT</version>
      </parent>
      <modelVersion>4.0.0</modelVersion>
    
      <artifactId>cloudalibaba-provider-payment9001</artifactId>
      <dependencies>
          <dependency>
              <groupId>com.alibaba.cloud</groupId>
              <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
          </dependency>
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-web</artifactId>
          </dependency>
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-actuator</artifactId>
          </dependency>
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-devtools</artifactId>
              <scope>runtime</scope>
              <optional>true</optional>
          </dependency>
          <dependency>
              <groupId>org.projectlombok</groupId>
              <artifactId>lombok</artifactId>
              <optional>true</optional>
          </dependency>
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-test</artifactId>
              <scope>test</scope>
          </dependency>
      </dependencies>
    </project>
    

    2、修改yaml

    server:
    port: 9001
    spring:
    application:
      name: nacos-payment-provider
    cloud:
      nacos:
        discovery:
          server-addr: localhost:8848 #配置Nacos地址
    management:
    endpoints:
      web:
        exposure:
          include: '*'
    

    3、主启动类

    ```java package com.daijunyi;

import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication public class NacosProviderPayment9001 {

public static void main(String[] args) {
    SpringApplication.run(NacosProviderPayment9001.class,args);
}

}

<a name="Cj4RA"></a>
#### 4、业务类

- controller
```java
package com.daijunyi.controller;

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

import java.util.UUID;

@RestController
public class PaymentController {

    @Value("${server.port}")
    private String port;

    @GetMapping("/payment/get/{id}")
    public String getPayment(@PathVariable("id") String id){
        return port+","+ UUID.randomUUID().toString();
    }
}

5、启动测试

image.png

2、复制一个9001位9002的方法

image.png

  • 通过-DServer.port=9011进行新的端口号设置

image.png

image.png
image.png

  • 运行起来之后的实例

image.png

3、创建cloudalibaba-provider-payment9002

  • 复制9001,只是修改端口号为9002

    4、基于Nacos的服务消费者cloudalibaba-consumer-nacos-order83

    1、修改pom

    ```xml <?xml version=”1.0” encoding=”UTF-8”?> <project xmlns=”http://maven.apache.org/POM/4.0.0

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    

      <artifactId>cloud2020</artifactId>
      <groupId>com.daijunyi</groupId>
      <version>1.0-SNAPSHOT</version>
    

    4.0.0 cloudalibaba-consumer-nacos-order83 com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery com.daijunyi cloud-api-commons ${project.version} org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-actuator org.springframework.boot spring-boot-devtools runtime true org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test

<a name="avOte"></a>
#### 2、修改yaml
```yaml
server:
  port: 83

spring:
  application:
    name: nacos-order-consumer
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

service-url:
  nacos-user-service: http://nacos-payment-provider

3、主启动类

package com.daijunyi;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerOrder83 {

    public static void main(String[] args) {
        SpringApplication.run(NacosConsumerOrder83.class,args);
    }
}

4、业务类

  • config ```java package com.daijunyi.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate;

@Configuration public class ApplicationContextConfig {

@Bean
@LoadBalanced
public RestTemplate restTemplate(){
    return new RestTemplate();
}

}


- controller
```java
package com.daijunyi.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class OrderController {

    @Value("${service-url.nacos-user-service}")
    private String serviceUrl;

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/consumer/payment/get/{id}")
    public String getPayment(@PathVariable("id") String id){
        return restTemplate.getForObject(serviceUrl+"/payment/get/"+id,String.class);
    }
}

5、测试

  • 访问http://localhost:83/consumer/payment/get/1

    • image.png
    • image.pngimage.png

      5、服务注册中心对比

      1、Nacos全景图所示

      image.png

      2、Nacos和CAP

      image.png

      3、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’

    4、Nacos作为服务配置中心演示

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

    1、创建cloudalibaba-config-nacos-client3377

  • 修改pom ```xml <?xml version=”1.0” encoding=”UTF-8”?> <project xmlns=”http://maven.apache.org/POM/4.0.0

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    

      <artifactId>cloud2020</artifactId>
      <groupId>com.daijunyi</groupId>
      <version>1.0-SNAPSHOT</version>
    

    4.0.0 cloudalibaba-config-nacos-client3377 com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-actuator org.springframework.boot spring-boot-devtools runtime true org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test


- yaml
   - 需要两个配置文件
   - 一个是bootstrap.yaml一个是application.yaml
   - 为什么需要2个配置文件
      - Nacos同springcloud-config-样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动。springboot中配置文件的加载是存在优先级顺序的,bootstrap优先级高于application
   - bootstrap.yaml
```yaml
server:
  port: 3377

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #服务注册中心地址
      config:
        server-addr: localhost:8848 #配置中心地址
        file-extension: yaml #指定yaml格式的配置
  • application.yaml
    spring:
    profiles:
    active: dev
    
  • 主启动类 ```java package com.daijunyi;

import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication public class ConfigNacosClient3377 { public static void main(String[] args) { SpringApplication.run(ConfigNacosClient3377.class,args); } }


- 业务类
```java
package com.daijunyi.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.RestController;

@RestController
@RefreshScope
public class ConfigInfoController {

    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/config/info")
    public String getConfigInfo(){
        return configInfo;
    }
}

2、在Nacos中添加配置信息

  • Nacos中的匹配规则
  • 公式

    • ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
    • prefix默认为spring.application.name的值
    • spring.profile.active既为当前环境对应的profile,可以通过配置项spring.profile.active
    • file-exetension为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension配置
    • image.png

      3、实操配置

      image.png
      image.png
  • 访问http://localhost:3377/config/info

    • image.png
  • 当你直接更改配置文件版本为2

image.png

  • 访问http://localhost:3377/config/info
  • image.png
  • 发现nacos中发布了配置文件,配置文件直接修改了,非常方便,根本不需要搞什么config,和bus中的还得 搞个post请求一下。

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

    1、多环境多项目管理

  • 问题1:
    • 实际开发中,通常一个 系统会准备
    • dev开发环境
    • test测试环境
    • prod生产环境。
    • 如何保证指定环境启动时服务能正确读取到Nacos_上相应环境的配置文件呢?
  • 问题2:

    • 一个大型分布式微服务系统会有很多微服务子项目,
    • 每个微服务项目又都会有相应的开发环境、测试环境、预发环境、正式环境…..
    • 那怎么对这些微服务配置进行管理呢?

      2、Nacos的图形化管理界面

      image.png
      image.png

      3、Namespace+Group+Data ID三者关系?为什么这么设计?

      1、是什么

    • 类似Java里面的package名和类名

    • 最外层的namespace是可以用于区分部署环境的,Group和DatalD逻辑 上区分两个目标对象。

      2、三者情况

    • image.png

  • 默认情况:

    • Namespace=public, Group=DEFAULT GROUP,默认Cluster是DEFAULT
    • Nacos默认的命名空间是public, Namespace主要用来实现隔离。
    • 比方说我们现在有三个环境:开发、测试、产环境,我们就可以创建三个Namespace,不同的Namespace之间是隔离的。
    • Group默认是DEFAULT_ GROUP, Group可以把不同的微服务划分到同一个分组里面去
    • Service就是微服务;一个Service可以包含多个Cluster (集群),Nacos默认Cluster是DEFAULT, Cluster是对指定微服务的一 个虚拟划分。
    • 比方说为了容灾,将Service微服务分别部署在了杭州机房和广州机房,这时就可以给杭州机房的Service微服务起一 个集群名称(HZ) ,给广州机房的Service微服务起一 个集群名称(GZ) ,还可以尽量让同一个机房的微服务互相调用,以提升性能。
    • 最后是Instance,就是微服务的实例。

      4、case

      1、DataID方案

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

  • 默认空间+默认分组+新建dev和test两个DataID
  • image.png
  • 修改yaml

    spring:
    profiles:
      active: test
    
  • 访问http://localhost:3377/config/info

    • image.png

      2、Group方案

  • 通过Group实现环境区分

    • 直接在下面的页面中添加分组名称
    • image.png
  • 修改yaml

    • application.yaml

      spring:
      profiles:
      active: dev
      
    • bootstrap.yaml ```yaml server: port: 3377

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


- 访问[http://localhost:3377/config/info](http://localhost:3377/config/info)
   - ![image.png](https://cdn.nlark.com/yuque/0/2021/png/12971636/1630983338947-8c27aacc-5294-4e8f-a523-547bce67a539.png#clientId=uecfd3ad5-6da5-4&from=paste&height=71&id=uf046e294&margin=%5Bobject%20Object%5D&name=image.png&originHeight=142&originWidth=940&originalType=binary&ratio=1&size=22113&status=done&style=none&taskId=udccaf9b5-09c4-419f-8142-8a64e0ffe9b&width=470)
<a name="kIBT1"></a>
#### 3、Namespace方案

- 新建dev/test的Namespace
   - ![image.png](https://cdn.nlark.com/yuque/0/2021/png/12971636/1630983426850-dca4c876-f674-457d-aea7-ce0c883a5682.png#clientId=uecfd3ad5-6da5-4&from=paste&height=397&id=u481016f0&margin=%5Bobject%20Object%5D&name=image.png&originHeight=794&originWidth=2878&originalType=binary&ratio=1&size=143825&status=done&style=none&taskId=u9071e21d-67fb-43c9-8e21-7ae234e1707&width=1439)
- 添加一个配置
   - 在命名空间dev下创建一个配置
   - ![image.png](https://cdn.nlark.com/yuque/0/2021/png/12971636/1630983539867-19d82cb1-6161-4e8b-8022-64ddae6269d9.png#clientId=uecfd3ad5-6da5-4&from=paste&height=386&id=ue3805859&margin=%5Bobject%20Object%5D&name=image.png&originHeight=772&originWidth=2514&originalType=binary&ratio=1&size=94781&status=done&style=none&taskId=u84343753-318d-491b-843c-beb39af3db3&width=1257)
   - ![image.png](https://cdn.nlark.com/yuque/0/2021/png/12971636/1630983565167-892b3145-1e8d-4581-9e6e-6d6534a9394a.png#clientId=uecfd3ad5-6da5-4&from=paste&height=302&id=u271b0fa9&margin=%5Bobject%20Object%5D&name=image.png&originHeight=604&originWidth=2524&originalType=binary&ratio=1&size=120064&status=done&style=none&taskId=uf91eeed3-1847-47e1-8a56-afa35c234b0&width=1262)
- 修改yaml
   - 修改application.yaml
```yaml
spring:
  profiles:
    active: info
  • 修改bootstrap.yaml ```yaml server: port: 3377

spring: application: name: nacos-config-client cloud: nacos: discovery: server-addr: localhost:8848 #服务注册中心地址 config: server-addr: localhost:8848 #配置中心地址 file-extension: yaml #指定yaml格式的配置 group: INFO_GROUP namespace: e10fe917-b270-42af-9bc4-bd90fba568ec


- 访问[http://localhost:3377/config/info](http://localhost:3377/config/info)
   - ![image.png](https://cdn.nlark.com/yuque/0/2021/png/12971636/1630983677460-acc4b69f-62c3-4205-bb23-20b0cde21240.png#clientId=uecfd3ad5-6da5-4&from=paste&height=67&id=u62319538&margin=%5Bobject%20Object%5D&name=image.png&originHeight=134&originWidth=908&originalType=binary&ratio=1&size=21175&status=done&style=none&taskId=u3798fed2-30b0-43f7-b81d-0e1cddc5688&width=454)
<a name="MriqU"></a>
## 5、Nacos集群和持久化配置(重要)
<a name="MP9br"></a>
### 1、官网说明
<a name="sW0HN"></a>
#### 1、介绍
[https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html](https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html)<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/12971636/1630983811411-5e220a4d-035b-49c1-b481-da1cb085cf64.png#clientId=uecfd3ad5-6da5-4&from=paste&height=569&id=u7db37be8&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1138&originWidth=988&originalType=binary&ratio=1&size=187166&status=done&style=none&taskId=ue915ecb0-32df-42f7-983a-b29d8b2d27e&width=494)
<a name="oj8Fe"></a>
#### 2、重点环境说明
[https://nacos.io/zh-cn/docs/deployment.html](https://nacos.io/zh-cn/docs/deployment.html)<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/12971636/1630984145068-4e6c44fd-f511-4f79-8a41-f1ff96786a7b.png#clientId=uecfd3ad5-6da5-4&from=paste&height=403&id=ud541cafa&margin=%5Bobject%20Object%5D&name=image.png&originHeight=806&originWidth=1620&originalType=binary&ratio=1&size=170760&status=done&style=none&taskId=u337d6e3b-9568-4e9c-9262-bd6c4110973&width=810)<br />需要5.6.5以上的数据库<br />所以我们安装一个 5.7的吧

- 使用docker运行
   - 数据库账号root
   - 密码123456
   - 端口10005
```shell
docker run -p 10005:3306 --name mysql5.7 -v /Users/djy/Desktop/mysql5.7/conf:/etc/mysql/conf.d -v /Users/djy/Desktop/mysql5.7/logs:/logs -v /Users/djy/Desktop/mysql5.7/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

2、Nacos持久化配置配置mysql

  • Nacos默认自带的是嵌入式数据库derby
  • derby到mysql切换配置步骤

    • nacos-server-1.1.4\nacos\conf目录下找到sql脚本

      • nacos-mysql.sql
      • 创建数据库nacos_config

        mysql> create database nacos_config;
        Query OK, 1 row affected (0.01 sec)
        mysql> use nacos_config;
        Database changed
        mysql> show databases;
        +--------------------+
        | Database           |
        +--------------------+
        | information_schema |
        | mysql              |
        | nacos_config       |
        | performance_schema |
        | sys                |
        +--------------------+
        5 rows in set (0.01 sec)
        
      • 执行脚本

        mysql> show tables;
        +------------------------+
        | Tables_in_nacos_config |
        +------------------------+
        | config_info            |
        | config_info_aggr       |
        | config_info_beta       |
        | config_info_tag        |
        | config_tags_relation   |
        | group_capacity         |
        | his_config_info        |
        | roles                  |
        | tenant_capacity        |
        | tenant_info            |
        | users                  |
        +------------------------+
        11 rows in set (0.01 sec)
        
    • nacos-server-1.1.4\nacos\conf目录下找到application.properties ``` spring.datasource.platform=mysql

db.num=1 db.url.0=jdbc:mysql://localhost:10005/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true db.user=root db.password=123456


- 启动查看
```shell
startup.sh -m standalone

image.png
image.png

3、Linux、mac版Nacos+MySQL生产环境配置

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

    1、配置cluster.conf文件

    • 修改为mysql数据库模式,并且把数据库脚本根据上面的操作已经设置完成
    • Linux服务器上nacos的集群配置cluster.conf

      • 梳理出3台nacos机器的不同服务端口号
      • 复制出cluster.conf,在nacos/conf目录下
        cp cluster.conf.example cluster.conf
        
    • 根据自己的环境在当前本机上添加三个机器地址

      • 不能使用localhost ```shell

        it is ip

        172.20.10.3:3333 172.20.10.3:3334 172.20.10.3:3335
<a name="s5scO"></a>
#### 2、修改启动startup.sh以支持port端口支持可以多机运行

- /mynacos/nacos/bin目录下有startup.sh
- 修改内容
   - ![image.png](https://cdn.nlark.com/yuque/0/2021/png/12971636/1630987109362-04f3d7b7-b71a-44c6-9820-e736045818d3.png#clientId=u553ce0c9-39cb-4&from=paste&height=314&id=u9d6b2b19&margin=%5Bobject%20Object%5D&name=image.png&originHeight=628&originWidth=1332&originalType=binary&ratio=1&size=457591&status=done&style=none&taskId=ub063e661-c3ce-405d-828f-04db5d25711&width=666)
   - ![image.png](https://cdn.nlark.com/yuque/0/2021/png/12971636/1630987126455-f2d1f6b9-f187-4074-984a-d11132c2cf91.png#clientId=u553ce0c9-39cb-4&from=paste&height=574&id=ua7435ca3&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1148&originWidth=2204&originalType=binary&ratio=1&size=990183&status=done&style=none&taskId=uef9b7d75-fc36-4e58-b4a0-b240df0fe2a&width=1102)
- 再启动三台服务
```shell
./startup.sh -p 3333
./startup.sh -p 3334
./startup.sh -p 3335
  • nacos is starting with cluster

    3、Nginx的配置,由它作为负载均衡器

  • mac平台下查看nginx

    djydeMacBook-Pro:bin DD$ which nginx
    /usr/local/bin/nginx
    djydeMacBook-Pro:bin DD$ sudo /usr/local/bin/nginx -t
    nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful
    
  • 修改nginx.conf ```shell

user nobody;

worker_processes 1;

error_log logs/error.log;

error_log logs/error.log notice;

error_log logs/error.log info;

pid logs/nginx.pid;

events { worker_connections 1024; }

http { include mime.types; default_type application/octet-stream;

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

#access_log  logs/access.log  main;

sendfile        on;
#tcp_nopush     on;

#keepalive_timeout  0;
keepalive_timeout  65;

#gzip  on;

upstream cluster{
    server 172.20.10.3:3333;
    server 172.20.10.3:3334;
    server 172.20.10.3:3335;
}

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    location / {
        proxy_pass http://cluster;
    }
}

}


- 启动nginx
```shell
sudo /usr/local/bin/nginx

image.png

4、测试

  • 微服务cloudalibaba-provider-payment9002,9001,还有83修改启动注册进nacos集群
  • 修改yaml ```yaml server: port: 83

spring: application: name: nacos-order-consumer cloud: nacos: discovery: server-addr: localhost:80

service-url: nacos-user-service: http://nacos-payment-provider

```