使用Nacos做为SpringCloud的注册中心

【转载请注明出处】:https://blog.csdn.net/huahao1989/article/details/106679044

1. Nacos介绍

1.1 Nacos关键特性

Nacos 致力于发现、配置和管理微服务。Nacos 支持几乎所有主流类型的“服务”的发现、配置和管理:

Nacos 的关键特性包括:

  • 服务发现和服务健康监测
    Nacos 支持基于 DNS 和基于 RPC 的服务发现。服务提供者使用原生SDKOpenAPI、或一个独立的Agent TODO注册 Service 后,服务消费者可以使用DNS TODOHTTP&API查找和发现服务。

    Nacos 提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。Nacos 支持传输层 (PING 或 TCP)和应用层 (如 HTTP、MySQL、用户自定义)的健康检查。 对于复杂的云环境和网络拓扑环境中(如 VPC、边缘网络等)服务的健康检查,Nacos 提供了 agent 上报模式和服务端主动检测2种健康检查模式。Nacos 还提供了统一的健康检查仪表盘,帮助您根据健康状态管理服务的可用性及流量。

  • 动态配置服务
    动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。

    动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。

    配置中心化管理让实现无状态服务变得更简单,让服务按需弹性扩展变得更容易。

    Nacos 提供了一个简洁易用的UI (控制台样例 Demo) 帮助您管理所有的服务和应用的配置。Nacos 还提供包括配置版本跟踪、金丝雀发布、一键回滚配置以及客户端配置更新状态跟踪在内的一系列开箱即用的配置管理特性,帮助您更安全地在生产环境中管理配置变更和降低配置变更带来的风险。

  • 动态 DNS 服务
    动态 DNS 服务支持权重路由,让您更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。动态DNS服务还能让您更容易地实现以 DNS 协议为基础的服务发现,以帮助您消除耦合到厂商私有服务发现 API 上的风险。

    Nacos 提供了一些简单的DNS APIs TODO帮助您管理服务的关联域名和可用的 IP:PORT 列表.

  • 服务及其元数据管理
    Nacos 能让您从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据。

1.2 Nacos 生态图

image.png

Nacos 无缝支持一些主流的开源生态,例如

使用 Nacos 简化服务发现、配置管理、服务治理及管理的解决方案,让微服务的发现、管理、共享、组合更加容易。

2. 启动Nacos服务

2.1 预备环境准备

Nacos 依赖Java环境来运行。如果您是从代码开始构建并运行Nacos,还需要为此配置Maven环境,请确保是在以下版本环境中安装使用:

  • 64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
  • 64 bit JDK 1.8+;下载&配置
  • Maven 3.2.x+;下载&配置
2.2 下载源码或者安装包

你可以通过源码和发行包两种方式来获取 Nacos。

  • 从 Github 上下载源码方式
  git clone https://github.com/alibaba/nacos.git
  cd nacos/
  mvn -Prelease-nacos clean install -U  
  ls -al distribution/target/
  cd distribution/target/nacos-server-$version/nacos/bin
  • 下载编译后压缩包方式
    您可以从最新稳定版本下载nacos-server-$version.zip包。
    unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz
    cd nacos/bin
2.3 启动服务器
  • Linux/Unix/Mac
    启动命令(standalone代表着单机模式运行,非集群模式):
    sh startup.sh -m standalone

  • Windows
    启动命令:
    cmd startup.cmd
    或者双击startup.cmd运行文件。

2.4 关闭服务器
  • Linux/Unix/Mac
    sh shutdown.sh

  • Windows
    cmd shutdown.cmd
    或者双击shutdown.cmd运行文件。

2.5 控制台

浏览器打开 http://127.0.0.1:8848/nacos
默认的用户名密码都是nacos

3. 启动服务发现

3.1 service-provider

添加依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>0.9.0.RELEASE</version>
</dependency>

配置文件

server:
  port: 8021
spring:
  application:
    name: service-provider
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

启动类

@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderApplication {

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

	@RestController
	class EchoController {
		@GetMapping(value = "/echo")
		public String echo(String name) {
			return "Hello " + name;
		}
	}
}

启动服务即可在Nacos控制台的服务列表中看到。

3.2 service-consumer

添加依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>0.9.0.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

配置文件

 server:
  port: 8011
spring:
  application:
    name: service-consumer
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

这里使用feign调用provider
client

@FeignClient(name = "service-provider")
public interface NacosClient { 
    @GetMapping(value = "/echo")
    ResponseEntity<String> echo(String name) ;
}

启动类

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApplication {

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

    @RestController
    public class TestController {
         @Autowired
          private NacosClient client;

          @GetMapping(value = "/echo")
          public ResponseEntity<String> echo(String name) {
			return client.echo(name);
          }
         
    }

}

启动Consumer,然后访问http://localhost:8011/echo?name=zhangsan即可看到provider的响应。

4. 启动配置管理

将service-consumer项目改成从Nacos拿配置
依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>0.9.0.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>0.9.0.RELEASE</version>
 </dependency>

配置文件

spring:
  application:
    name: service-consumer
  profiles:
    active: single
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        prefix: ${spring.application.name}
        file-extension: yaml

为了测试方便,在TestController中添加一个配置变量

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApplication {

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

    @RestController
    @RefreshScope
    public class TestController {
          @Autowired
          private NacosClient client;
          @Value("${useLocalCache:false}")
          private boolean useLocalCache;

          @GetMapping("/get")
          public boolean get() {
            return useLocalCache;
          }

          @GetMapping(value = "/echo")
          public ResponseEntity<String> echo(String name) {
			return client.echo(name);
          }
         
    }

}

在 Nacos Spring Cloud 中,dataId的完整格式如下:

${prefix}-${spring.profile.active}.${file-extension}
  • prefix默认为spring.application.name的值,也可以通过配置项spring.cloud.nacos.config.prefix来配置。
  • spring.profile.active即为当前环境对应的 profile
    注意:当spring.profile.active为空时,对应的连接符-也将不存在,dataId 的拼接格式变成${prefix}.${file-extension}
  • file-exetension为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension来配置。目前只支持propertiesyaml类型。

打开Nacos控制台的配置管理,添加配置项

  • Data ID:service-consumer-single.yaml
  • 配置内容:
  server:
    port: 8011
  spring:
    cloud:
      nacos:
        discovery:
          server-addr: 127.0.0.1:8848  
   
  useLocalCache: false

重新启动service-consumer,访问http://localhost:8011/echo?name=zhangsan可看到provider的响应,访问http://localhost:8011/get,此时返回内容为false。
在Nacos控制台的配置管理更新值useLocalCache: true,再次访问http://localhost:8011/get,此时返回内容为true,说明程序中的useLocalCache值已经被动态更新了。

【转载请注明出处】: https://blog.csdn.net/huahao1989/article/details/106679044

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值