SpringCloud12-Nacos

SpringCloud12-Nacos

1.Nacos

  1. Nacos=Eureka+Config+Bus。
  2. acos前四个字母分别为Naming和Configuration的前两个字母,最后的s为Service。
  3. Nacos官网。https://nacos.io/zh-cn/

2.Nacos下载和运行

  1. Nacos下载地址。https://github.com/alibaba/nacos/releases/tag/2.0.3
  2. 下载完后直接解压,进入bin目录运行。运行命令startup.cmd -m standalone,单机运行。
  3. 访问地址。http://localhost:8848/nacos,默认账号密码都是nacos。

3.创建微服务cloud-nacos-provider-payment9001

  1. pom.xml
<!--SpringCloud ailibaba nacos -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
  1. yml
server:
  port: 9001

spring:
  application:
    name: cloud-nacos-provider-payment
  cloud:
    nacos:
      discovery:
        server-addr: http://127.0.0.1:8848

# SpringCloud Alibaba官方文档采用的配置
management:
  endpoints:
    web:
      exposure:
        include: "*"
  1. Main
@SpringBootApplication
@EnableDiscoveryClient
public class CloudNacosProviderPayment9001Main {

    public static void main(String[] args) {
        SpringApplication.run(CloudNacosProviderPayment9001Main.class, args);
    }
}
  1. 创建cloud-nacos-provider-payment9002和cloud-nacos-provider-payment9001保持一致,作为生产者。

4.创建微服务cloud-nacos-consumer-order83

  1. pom.xml
<!-- Springcloud Alibaba在2020后就没有引入Ribbon进行负载均衡,要进行负载均衡需要引入
         spring-cloud-starter-loadbalancer,
         同时Eureka客户端默认也引入了spring-cloud-starter-loadbalancer
         -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<!--SpringCloud ailibaba nacos -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
  1. yml、Main和业务代码不变。
  2. 通过order83使用微服务名称调用9001和9002。

5.Nacos的CAP理论

  1. Nacos支持在AP和CP中进行切换。
  2. —般来说,如果不需要存储服务级别的信息且服务实例是通过nacos-client注册,并能够保持心跳上报,那么就可以选择AP模式。
  3. 如果需要在服务级别编辑或者存储配置信息,那么CP是必须,如K8S服务和DNS服务则适用于CP模式。
  4. CP模式下则支持注册持久化实例,以Raft协议为集群运行模式,该模式下注册实例之前必须先注册服务,如果服务不存在,则会返回错误。
  5. AP和CP的切换命令:curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP

6.创建微服务cloud-nacos-config-client3377

  1. pom.xml
<!--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>
<!-- Param ‘serviceName‘ is illegal, serviceName is blank。
需要引入 spring-cloud-starter-bootstrap 加载bootstrap配置文件-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
  1. bootstrap.yml和application.yml
# bootstrap.yml
server:
  port: 3377

spring:
  application:
    name: cloud-nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: http://127.0.0.1:8848
      # Nacos作为配置中心
      config:
        server-addr: http://127.0.0.1:8848
        file-extension: yml
        group: DEFAULT_GROUP

# Nacos中配置文件的命名规范
# ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
# cloud-nacos-config-client-dev.yml

# application.yml
spring:
  profiles:
    active: dev
  1. Main和controller不变。Controller需要使用@RefreshScope注解刷新配置。
  2. 在Nacos中添加cloud-nacos-config-client-dev.yml配置文件。

7.Nacos配置文件命名规范

  1. 官方给出的模板。${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension},即cloud-nacos-config-client-dev.yml。
  2. 配置文件可以通过命名空间(默认public)、分组(默认DEFAULT_GROUP)和DataId进行区分。
spring:
  application:
    name: cloud-nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: http://127.0.0.1:8848
      # Nacos作为配置中心
      config:
        server-addr: http://127.0.0.1:8848
        file-extension: yml
        # 分组
        group: DEV_GROUP
        # 在Nacos中创建命名空间后,产生的命名空间的id。
        namespace: 0fac47b9-dd7c-4185-b999-44dd1cfc23db

8.Nacos集群-切换数据库

  1. Nacos集群文档地址。https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html
  2. Nacos默认使用嵌入式数据库derby实现数据的存储,集群环境中要保证Nacos信息的一致性,就需要切换Nacos的数据库。
<dependency>
    <groupId>org.apache.derby</groupId>
    <artifactId>derby</artifactId>
</dependency>
  1. 创建数据库。执行nacos\conf\nacos-mysql.sql脚本创建数据库。
  2. 修改nacos\conf\applicaiton.properties配置文件,末尾添加配置信息。
spring.datasource.platform=mysql

### Count of DB:
db.num=1

### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123456

9.Nacos集群-集群搭建

  1. Nacos集群需要一个Nginx和三个Nacos。
  2. 修改nacos\conf\cluster.conf配置文件。
192.168.0.133:3333
192.168.0.133:4444
192.168.0.133:5555 # 将 3355 4444 5555 划分到一个集群。
  1. 修改启动脚本,增加-p参数,来设置启动的端口。新版本不需要这个步骤,默认下载的脚本就支持-p参数启动。
  2. 修改Nginx配置文件。
# cluster分流到三个服务上。
upstream cluster {
    server 127.0.0.1:3333;
    server 127.0.0.1:4444;
    server 127.0.0.1:5555;
}

server {
    #listen       80;
    listen       1111; # 监听的端口
    server_name  localhost; # 监听的host

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    location / {
    #root   html;
    #index  index.html index.htm;
    proxy_pass http://cluster; # 访问 http://127.0.0.1:1111时,通过cluster分流。
}
  1. 通过制定文件启动Nginx。./nginx -c /etc/nginx/conf/nginx.conf
posted @ 2021-10-07 20:05  行稳致远方  阅读(27)  评论(0)    收藏  举报