专栏首页服务端技术使用Nacos做为SpringCloud的注册中心
原创

使用Nacos做为SpringCloud的注册中心

【转载请注明出处】:https://cloud.tencent.com/developer/article/1642606

1. Nacos介绍

1.1 Nacos关键特性

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

Nacos 的关键特性包括:

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://cloud.tencent.com/developer/article/1642606

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 用Spring Boot Admin来监控我们的微服务

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

    后端老鸟
  • MySQL binlog

    【转载请注明出处】:https://cloud.tencent.com/developer/article/1632663

    后端老鸟
  • APM调用链产品对比

    【转载请注明出处】:https://cloud.tencent.com/developer/article/1655067

    后端老鸟
  • 1064 朋友数 (20 分)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    韩旭051
  • Python3网络爬虫(四):使用User Agent和代理IP隐藏身份

    原作者及原文链接:https://blog.csdn.net/c406495762/article/details/60137956

    圆方圆PYTHON学院
  • java String时间转为时间戳

    String startDate="2017-08-15"; String endDate="2017-08-15"; ...

    千往
  • Leetcode 65 Valid Number DFA有限状态机

    Validate if a given string is numeric. Some examples: "0" => true " 0.1 " =>...

    triplebee
  • LeetCode 2020 力扣杯全国春季编程大赛(1644/4093,前40.2%)

    前两题比较顺利,24分钟做出来了,第3,4两题试了好久,都显示超时,第5题没心思看,想着第3,4题应该能做出来的。

    Michael阿明
  • [Go] 并发imap收信

    陶士涵
  • 实时性迷思(2)——“时间片轮转”的沙子

    在前面文章中,我们介绍了实时性的基本模型、并分析了实时性窗口内不同位置的时间对整个系统的价值,得出了一个结论——实时性窗口中越靠前的时间对系统中的其它任务越有价...

    GorgonMeducer 傻孩子

扫码关注云+社区

领取腾讯云代金券