Spring Cloud Alibaba Nacos

 

正文

一、介绍

  Nacos:由单词Naming和Cofiguration的前两个字母组成,最后的s代表Service。

1,作用

  • 替代Eureka做服务注册中心
  • 替代Cloud Config做服务配置中心

2,地址

  文档:https://nacos.io/zh-cn/docs/what-is-nacos.html

    https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html#_spring_cloud_alibaba_nacos_discovery

  下载:https://github.com/alibaba/nacos/tags

3,各注册中心比较

比较nacoseurekaconsulzookeeper
一致性协议 CP + AP 可切换 AP CP CP
健康检查 TCP/HTTP/MySQL/Client Beat Client Beat TCP/HTTP/gRPC/CMD Client Beat
负载均衡 权重/DSL/metadata/CMDB Ribbon Fabio
雪崩保护 支持 支持 不支持 不支持
自动注销实例 支持 支持 不支持 支持
访问协议 HTTP/DNS/UDP HTTP HTTP/DNS TCP
监听支持 支持 支持 支持 支持
多数据中心 支持 支持 支持 不支持
跨注册中心 支持 不支持 支持 不支持
SpringColud集成 支持 支持 支持 不支持
Dubbo集成 支持 不支持 不支持 支持
kubernates集成 支持 不支持 支持 不支持

 

二、nacos安装

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

1,单机版

直接下载:nacos-server-1.1.4.tar.gz

a)上传并解压

tar -xvf nacos-server-1.1.4.tar.gz

b)将nacos/conf/nacos-mysql.sql导入到mysql的数据库中

c)在配置文件中添加数据库配置

vi nacos/conf/application.properties

#########在文末添加#####################
spring.datasource.platform=mysql

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

d)启动nacos

nacos/bin/startup.sh -m standalone

2,集群版

a)下载解压上传,导入数据,修改application.properties(同上)

b)修改cluster.conf

#查看对应的主机
[root@hadoop103 nacos_cluster]# hostname -i
192.168.232.103
#配置集群
[root@hadoop103 nacos_cluster]# vi conf/cluster.conf
192.168.232.103:3333
192.168.232.103:4444
192.168.232.103:5555

c)修改startup.sh

vi bin/startup.sh

     

d)启动nacos

bin/startup.sh -p 3333
bin/startup.sh -p 4444
bin/startup.sh -p 5555

e)配置nginx.conf

复制代码
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    upstream cluster{
        server 127.0.0.1:3333;
        server 127.0.0.1:4444;
        server 127.0.0.1:5555;
    }
    server {
        listen       1111;
        server_name  localhost;
        location / {
            proxy_pass http://cluster;
        }
    }
}
复制代码

f)nginx启动

./sbin/nginx -c ./conf/nginx.conf
#访问路径
http://hadoop103:1111/nacos

三、Nacos服务启动

1,Nacos基础示例

源码:cloudalibaba-provider-payment9001

  pom文件

复制代码
<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>
</dependencies>
复制代码

  yaml文件

复制代码
server:
  port: 9001

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

  application

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

2,Nacos作为基础配置中心

源码:cloudalibaba-config-nacos-client3377

  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>
<!--web + actuator-->
<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>
复制代码

  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格式的配置
  profiles:
    active: dev  #${spring.applicaiton.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}作为nacos的dataId
复制代码

  applicaiton同上

  controller

复制代码
@RestController
@RefreshScope //动态刷新引用值
public class ConfigClientController {
    @Value("${config.info}")
    private String configInfo;
    @GetMapping("/config/info")
    public String getConfigInfo() {
        return configInfo;
    }
}
复制代码

  nacos中新建配置文件nacos-config-client-dev.yaml

      

3,集群Nacos的示例

源码地址:cloudalibaba-config-nacos-cluster3388

  与上一步(2)的配置基本一致

  只有对应的yaml文件不同

复制代码
server:
  port: 3388
spring:
  profiles:
    active: dev  #${spring.applicaiton.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}作为nacos的dataId
  application:
    name: nacos-config-cluster
  cloud:
    nacos:
      discovery:
        server-addr: hadoop103:1111 #服务注册中心地址
      config:
        server-addr: hadoop103:1111 #配置中心地址
        file-extension: yaml #指定yaml格式的配置
复制代码

四、DataId,Group,NameSpace

源码地址:cloudalibaba-config-nacos-cluster3388

DataId:${spring.applicaiton.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

Group:对应Group

NameSpace:对应命名空间id

复制代码
server:
  port: 3388
spring:
  profiles:
    active: dev  #${spring.applicaiton.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}作为nacos的dataId
  application:
    name: nacos-config-cluster
  cloud:
    nacos:
      discovery:
        server-addr: hadoop103:1111 #服务注册中心地址
        namespace: a35df75a-6d0e-4e28-9b89-b4d2d8dd87e6 #服务发现所属的命名空间
      config:
        server-addr: hadoop103:1111 #配置中心地址
        file-extension: yaml #指定yaml格式的配置
        group: TEST_GROUP #对应group
        namespace: a35df75a-6d0e-4e28-9b89-b4d2d8dd87e6 #对应myns的命名空间的ID
复制代码

     

posted @   MXC肖某某  阅读(216)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示