❤️❤️❤️
哈喽~大家好,欢迎进入本人【图图是个好孩纸】的博客是一名主攻Java后端的程序猿,对前端也有一定的了解,未来持续更新更多的【后端技术】&【学习心得】
如果对【Java后端技术】感兴趣的大可爱或小可爱,欢迎关注【图图是个好孩纸】~
❤️❤️❤️
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 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
如 Nacos 全景图所示,Nacos 无缝支持一些主流的开源生态,例如
进入nacos官网,从nacos官网GitHub上下载nacos,我们这里下载Windows版本基本
Release 2.1.0 (Apr 29, 2022) · alibaba/nacos · GitHub
在其bin目录下,使用管理员方式运行
在cmd界面使用启动命令
startup.cmd -m standalone
启动成功访问页面:
192.168.1.1:8848/nacos/index.html
适配 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 |
pom.xml
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
application.yml
server:
port: 6001
spring:
application:
name: nacos-user-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848
创建控制器 RestUserController
@RestController
public class RestUserController {
@GetMapping("/login")
public String login(String name) {
return "提供者接受信息:" + name;
}
}
配置启动类
通过 Spring Cloud 原生注解 @EnableDiscoveryClient
开启服务注册发现功能:
@EnableDiscoveryClient
@SpringBootApplication
public class NacosUserProviderApplication {
public static void main(String[] args) {
SpringApplication.run(NacosUserProviderApplication.class, args);
}
}
pom.xml
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-openfeign
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
application.yml
# 应用服务 WEB 访问端口
server:
port: 6501
spring:
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 熔断器
@Component
public class UserFeignClientFallback implements UserFeignClient {
@Override
public String login(@RequestParam("name") String name) {
return "触发了熔断器......值为:" + name;
}
}
创建UserController 控制器
@RestController
public class UserController {
@Autowired
private UserFeignClient feignClient;
@GetMapping("/dologin")
public String dologin(String name) {
return feignClient.login(name);
}
}
配置启动类
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class NacosUserConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(NacosUserConsumerApplication.class, args);
}
}
pom.xml
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
org.springframework.cloud
spring-cloud-starter-gateway
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
2.2.2.RELEASE
application.yml
server:
port: 6601
spring:
application:
name: nacos-gateway-server #应用程序名称
cloud:
gateway:
routes:
- id: nacos-user-consumer
uri: lb://nacos-user-consumer #要跳转的客户端名称
predicates:
- Path=/user/** #匹配的路径
filters:
- RewritePath=/user(?/?.*) , $\{segment} #匹配的路径要替换成 表达式
nacos:
discovery:
server-addr: localhost:8848
创建gateway过滤器 RedisGlobalFilter
@RefreshScope //此注解必须打上,用来更新属性
@Component
public class RedisGlobalFilter implements GlobalFilter, Ordered {
@Value("${token:false}")
private boolean token = true;
@Override
public 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);
}
@Override
public int getOrder() {
return 1;
}
}
配置启动类
@EnableDiscoveryClient
@SpringBootApplication
public class NacosGatewayServerApplication {
public static void main(String[] args) {
SpringApplication.run(NacosGatewayServerApplication.class, args);
}
}
访问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?name=张三
我们也可以测试去修改nacos中 配置文件信息将token改为false
发布后再次访问:
token改为false后无需刷新,重新启动项目,naoco自动刷新这个属性
因为我们在 gateway网关中,去获取远程nacos中的配置属性时,打上该注解
@RefreshScope
@Value("${token:false}") //设置默认值
总结:
本章节的思路是使用springcould和nacos进行无缝衔接测试
浏览器请求首先经过gateway网关,根据gateway网关配置不同请求路径,根据不同的请求路径拿取在远程部署的nacos配置服务中获取数据,当nacos配置服务中没有该数据时,则会拦截该请求,不让它再次去访问我们的客户端(消费者),从而减少服务器的压力,起到一定的过滤作用,而nacos的作用呢主要是实现动态服务发现、服务配置、服务元数据及流量管理,起到一个管家的作用,管理者每一个个微小的服务