❤️❤️❤️
哈喽~大家好,欢迎进入本人【图图是个好孩纸】的博客

是一名主攻Java后端的程序猿,对前端也有一定的了解,未来持续更新更多的【后端技术】&【学习心得】

如果对【Java后端技术】感兴趣的大可爱或小可爱,欢迎关注【图图是个好孩纸】~
❤️❤️❤️

什么是 Nacos?

1、概述

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

2、什么是 Nacos?

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

Kubernetes Service

gRPC&Dubbo RPC Service

Spring Cloud RESTful Service

nacos关键特性

服务发现和服务健康监测

动态配置服务

动态 DNS 服务

服务及其元数据管理

详细介绍请参考nacos官网文档:https://nacos.io/zh-cn/docs/what-is-nacos.html

3、Nacos 生态图

如 Nacos 全景图所示,Nacos 无缝支持一些主流的开源生态,例如

  • Spring Cloud
  • Apache Dubbo and Dubbo Mesh
  • Kubernetes and CNCF

无缝衔接springcould和nacos

1、下载nacos 版本为Windows

进入nacos官网,从nacos官网GitHub上下载nacos,我们这里下载Windows版本基本

Release 2.1.0 (Apr 29, 2022) · alibaba/nacos · GitHub

2、启动nacos

在其bin目录下,使用管理员方式运行

在cmd界面使用启动命令

startup.cmd -m standalone

启动成功访问页面:

192.168.1.1:8848/nacos/index.html

3、版本分支

适配 Spring Boot 为 2.4, Spring Cloud Hoxton 版本及以下的 Spring Cloud Alibaba 版本如下表(最新版本用*标记):

来自官网解说:

版本说明 · alibaba/spring-cloud-alibaba Wiki · GitHub

Spring Cloud Alibaba Version

Spring Cloud VersionSpring Boot Version

2.2.8.RELEASE*

Spring Cloud Hoxton.SR12

2.3.12.RELEASE

2.2.7.RELEASE

Spring Cloud Hoxton.SR12

2.3.12.RELEASE

2.2.6.RELEASE

Spring Cloud Hoxton.SR9

2.3.2.RELEASE

2.1.4.RELEASE

Spring Cloud Greenwich.SR6

2.1.13.RELEASE

2.2.1.RELEASE

Spring Cloud Hoxton.SR3

2.2.5.RELEASE

2.2.0.RELEASE

Spring Cloud Hoxton.RELEASE

2.2.X.RELEASE

2.1.2.RELEASE

Spring Cloud Greenwich

2.1.X.RELEASE

2.0.4.RELEASE(停止维护,建议升级)

Spring Cloud Finchley

2.0.X.RELEASE

1.5.1.RELEASE(停止维护,建议升级)

Spring Cloud Edgware

1.5.X.RELEASE

4、创建客户端(提供者)nacos-user-provider工程

pom.xml

com.alibaba.cloudspring-cloud-starter-alibaba-nacos-discovery

application.yml

server:port: 6001spring:application:name: nacos-user-providercloud:nacos:discovery:server-addr: localhost:8848

创建控制器RestUserController

@RestControllerpublic class RestUserController {@GetMapping("/login")public String login(String name) {return "提供者接受信息:" + name;}}

配置启动类

通过 Spring Cloud 原生注解@EnableDiscoveryClient开启服务注册发现功能:

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

5、创建客户端(消费者)nacos-user-consumer工程

pom.xml

org.springframework.bootspring-boot-starter-weborg.springframework.cloudspring-cloud-starter-openfeigncom.alibaba.cloudspring-cloud-starter-alibaba-nacos-discovery

application.yml

# 应用服务 WEB 访问端口server:port: 6501spring:application:name: nacos-user-consumer # 应用名称cloud:nacos:discovery:server-addr: localhost:8848#开启熔断器feign:hystrix:enabled: true

创建UserFeignClient 调用客户端(提供者)

//value 指要调用哪个提供者,fallback 指实现熔断器的类@FeignClient(value = "nacos-user-provider", fallback = UserFeignClientFallback.class)public interface UserFeignClient {@GetMapping("/login")String login(@RequestParam("name") String name);}

创建UserFeignClientFallback 熔断器

@Componentpublic class UserFeignClientFallback implements UserFeignClient {@Overridepublic String login(@RequestParam("name") String name) {return "触发了熔断器......值为:" + name;}}

创建UserController 控制器

@RestControllerpublic class UserController {@Autowiredprivate UserFeignClient feignClient;@GetMapping("/dologin")public String dologin(String name) {return feignClient.login(name);}}

配置启动类

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

6、创建gateway网关nacos-gateway-server工程

pom.xml

com.alibaba.cloudspring-cloud-starter-alibaba-nacos-discoveryorg.springframework.cloudspring-cloud-starter-gatewaycom.alibaba.cloudspring-cloud-starter-alibaba-nacos-config2.2.2.RELEASE

application.yml

server:port: 6601spring:application:name: nacos-gateway-server #应用程序名称cloud:gateway:routes:- id: nacos-user-consumeruri: lb://nacos-user-consumer#要跳转的客户端名称predicates:- Path=/user/**#匹配的路径filters:- RewritePath=/user(" />@RefreshScope //此注解必须打上,用来更新属性@Componentpublic class RedisGlobalFilter implements GlobalFilter, Ordered {@Value("${token:false}")private boolean token = true;@Overridepublic Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {//在此处写代码就是pre过滤器System.out.println("配置文件的token : " + this.token); if (!token) {ServerHttpResponse response = exchange.getResponse();//{"msg":"验证不能通过"}byte[] datas = "{\"msg\":\"验证不能通过\"}".getBytes(StandardCharsets.UTF_8);DataBuffer buffer = response.bufferFactory().wrap(datas);response.getHeaders().add("Content-Type", "application/json;charset=UTF-8");return response.writeWith(Mono.just(buffer));}return chain.filter(exchange);}@Overridepublic int getOrder() {return 1;}}

配置启动类

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

7、进入nacos添加配置数据

8、使用postman测试

访问nacos你刚远程配置好的数据

http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos-gateway-server.properties&group=DEFAULT_GROUP&content=useLocalCache=false

这是我们去修改nacos配置列表属性,添加一个新的属性name

发布后再次访问:

说明nacos配置没错

启动我们刚创好的三个工程

nacos-gateway-server
nacos-user-consumer
nacos-user-provider

访问:

localhost:6601/user/dologin” />

我们也可以测试去修改nacos中 配置文件信息将token改为false

发布后再次访问:

token改为false后无需刷新,重新启动项目,naoco自动刷新这个属性

因为我们在 gateway网关中,去获取远程nacos中的配置属性时,打上该注解

@RefreshScope @Value("${token:false}")//设置默认值

总结:

本章节的思路是使用springcould和nacos进行无缝衔接测试

浏览器请求首先经过gateway网关,根据gateway网关配置不同请求路径,根据不同的请求路径拿取在远程部署的nacos配置服务中获取数据,当nacos配置服务中没有该数据时,则会拦截该请求,不让它再次去访问我们的客户端(消费者),从而减少服务器的压力,起到一定的过滤作用,而nacos的作用呢主要是实现动态服务发现、服务配置、服务元数据及流量管理,起到一个管家的作用,管理者每一个个微小的服务