1、Nacos :服务注册与发现
一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台
获取GIT上Nacos文件,打包并启动
克隆:git clone https://github.com/alibaba/nacos.git
打包:mvn -Prelease-nacos clean install -U
服务注册列表地址:http://192.168.43.20:8848/nacos/index.html
Nacas服务端点检查:http://localhost:8081/actuator/nacos-discovery(登录:nacos/naocs)
服务提供者与服务消费者
负载均衡:LoadBalancerClient替代原有的ribbon
Fegin用法保持不变
java
#提供者配置
spring:
application:
name: nacos-provider
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
@RestController
public class NacosController {
@GetMapping(value = "/provide/{message}")
public String echo(@PathVariable(value = "message") String message) {
return "Hello Nacos " + message;
}
}
#消费者配置
spring:
application:
name: nacos-consumer
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
@RestController
public class ConsumerController {
@Autowired
public LoadBalancerClient loadBalancerClient;
@Autowired
private RestTemplate restTemplate;
@Value("${spring.application.name}")
private String appName;
@GetMapping(value = "/duan/app/name")
public String duan() {
ServiceInstance instance = loadBalancerClient.choose("nacos-provider");
String url = String.format("http://%s:%s/provide/%s",
instance.getHost(),
instance.getPort(),
appName);
return restTemplate.getForObject(url, String.class);
}
}
2、Sentinel :熔断器机制
把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务稳定性
克隆:git clone https://github.com/alibaba/Sentinel.git
打包:mvn clean package
启动参数:java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=127.0.0.1:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar
Dashboard监控网址:localhost:8080(登录:sentinel/ sentinel)
java
#配置文件application.yml
spring:
application:
name: nacos-consumer-fegin-sentinel
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
sentinel:
transport:
port: 8719
dashboard: localhost:8080
3、Gateway :路由网关
动态设置路由网关,通过注册在nacos上的微服务的名称访问消费者与提供者
采用LoadBalanceClient的方式,以lb://开头,后面是注册在nacos上的服务名:
uri: lb://nacos-consumer(通过注册的微服务名访问)
java
#配置文件application.yml
spring:
application:
name: spring-gateway
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
sentinel:
transport:
port: 8718
dashboard: localhost:8080
gateway:
discovery:
locator:
enabled: true
routes:
#采用自定义路由的ID(有固定的用法,不同的id有不同的功能)
- id: NACOS-CONSUMER
#采用LoadBalanceClient的方式,以lb://开头,后面是注册在nacos上的服务名
uri: lb://nacos-consumer
#Predicate 翻译为"谓词"的意思,必须。主要用来匹配用户的请求,有多种写法
predicates:
#Method 方法谓词,这里匹配GET与POST请求
- Method=GET,POST
- id: NACOS-CONSUMER-FEIGN
uri: lb://nacos-consumer-feign
predicates:
- Method=GET,POST
public class AuthFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
String token = exchange.getRequest().getQueryParams().getFirst("token");
if(token==null || token.isEmpty())
{
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
return exchange.getResponse().setComplete();
}
return chain.filter(exchange);
}
}
4、Nacos-config :动态配置以及多环境
配置管理-配置列表-新增配置
多环境-启用环境:spring.profiles.active=prod
应用名为Nacos Config中的Data ID,实际应用名称以配置中心的为准:
spring.application.name=nacos-provider-config
指定查找名为nacos-provider-config.yaml的文件:
spring.cloud.nacos.config.file-extension=yaml
Nacos Server的地址:spring.cloud.nacos.config.server-addr=127.0.0.1:8848
关闭动态刷新 spring.cloud.nacos.config.refresh.enabled=false
获取最新环境变量,获取配置信息
@Autowired
private ConfigurableApplicationContext applicationContext;
String name = applicationContext.getEnvironment().getProperty("user.name");
java
#多环境-启用环境
spring.profiles.active=prod
#应用名为Nacos Config中的Data ID,实际应用名称以配置中心的为准
spring.application.name=nacos-provider-config
#指定查找名为nacos-provider-config.yaml的文件
spring.cloud.nacos.config.file-extension=yaml
#Nacos Server的地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
#关闭动态刷新
spring.cloud.nacos.config.refresh.enabled=false