共计 2430 个字符,预计需要花费 7 分钟才能阅读完成。
Nacos 配置管理
- 对立配置管理
-
配置热更新
一个中央更新配置,无需重启就能够失效
- 配置共享
- 搭建 Nacos 集群
nacos 中的配置是集群都有的,须要热更新的文件。
微服务再启动的时候先读配置核心的配置,而后再读取本地的 yaml
配置。
nacos
的地址须要在服务一启动的时候就读取。所以最好是将 nacos 的配置放再 bootstrap.yml 中。
spring:
application:
name: userservice
profiles:
active: dev
cloud:
nacos:
config:
server-addr: localhost:8848
file-extension: yml # 这个须要要和上面截图中的 DataId 的后缀一样
能够通过 2 种形式显示热更新
@Value("${pattern.dateformat}")
private String dateFormat;
// 所在类上须要增加 @RefreshScope 注解
// ----------------
@Data
@Configuration
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {private String dateFormat;}
多环境配置共享
某些配置再开发 / 生产等环境中都是一样的
[spring.application.name]-[spring.profiles.active].yaml
,例如:userservice-dev.yaml
[spring.application.name].yaml
,例如:userservice.yaml
无论 profile
如何变动,[spring.application.name].yaml
这个文件肯定会加载,因而多环境共享配置能够写入这个文件
多种配置的优先级为: 服务名 -[active].yaml
> 服务名.yaml
> 本地配置
本地配置是最低的,配置核心中环境配置最高,多环境共享配置次之。
集群搭建
Feign 近程调用
申明式 HTTP 客户端,可能比RestTemplate
更加优雅的发送 http
申请。
自定义 Feign 的配置
-
日志
配置文件实现
feign: client: config: default: loggerLevel: FULL
java 代码配置
- 响应构造解析器
- 发送申请的编码器
- 反对注解格局,默认是反对 SpringMVC 注解,个别不须要设置
- 失败重试机制,默认没有,是通过底层 Ribbon 实现的重试机制
Feign 性能优化
Feign 的底层实现,三种形式
- URLConnection: 默认实现,不反对链接池
- Apache HttpClient:反对连接池
- OKHttp: 反对连接池
将默认形式改为反对连接池的。
feign:
client:
config:
default:
loggerLevel: BASIC
httpclient:
enabled: true
max-connections: 10
max-connections-per-route: 50 #每个门路的最大连接数
Feign 的最佳实际
- 消费者的 FeignClient 和提供者的 controller 定义对立的父接口作为规范
- 抽取独立模块
两种最佳实际都有弊病
第一种:会减少耦合度
第二种:会引入多以的不须要的接口
如 orderservice 值须要 feign-api 局部接口,当引进 feign-api 的时候会把哪些不须要的 > 也引进来
对立网关 Gateway
对整个微服务的一种爱护。
springCloud
中实现了 2 种网关
- gateway
- zuul
二者比拟:zuul
是阻塞式编程,而 gateway
是spring5
中提供的webflux
,属于响应式编程,具备更好的性能。
路由配置
- 路由 id:路由惟一标示
- uri:路由目的地,反对 lb 和 http 两种
- predicates:路由断言,判断申请是否符合要求,合乎则转发到路由目的地
- filters:路由过滤器,解决申请或响应
过滤器 GateFilter:
对进入网关的申请和微服务返回的响应做解决
GateFilter 有个毛病就是,是基于配置的,性能无限。
GlobalFilter 是基于代码实现的,其能够解决简单的过滤
简略的列子
@Order(-1)
@Component
public class AuthorizeFilter implements GlobalFilter {
/**
*
* @param exchange: 参数
* @param chain:申请链
* @return
*/
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
// 获取申请参数
ServerHttpRequest request = exchange.getRequest();
MultiValueMap<String, String> params = request.getQueryParams();
String s = params.getFirst("authorization");
// 获取参数值
if ("admin".equals(s)) {
// 放行
return chain.filter(exchange);
}
// 拦挡
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
return exchange.getResponse().setComplete();
}
}
全局过滤器 - 默认过滤器 - 路由过滤器三者执行程序
跨域:域名不统一就是跨域,次要包含:
域名不同:www.taobao.com
和 www.taobao.org
和 www.jd.com
和 miaosha.jd.com
域名雷同,端口不同:localhost:8080
和 localhost8081
跨域问题:浏览器 禁止申请的发起者与服务端产生跨域 ajax
申请,申请被浏览器拦挡的问题
解决方案:CORS