❤️❤️❤️
哈喽~大家好,欢迎进入本人【图图是个好孩纸】的博客是一名主攻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 Version | Spring 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的作用呢主要是实现动态服务发现、服务配置、服务元数据及流量管理,起到一个管家的作用,管理者每一个个微小的服务