Nacos 配置管理
- 统一配置管理
- 配置热更新
一个地方更新配置,无需重启就可以生效
- 配置共享
- 搭建Nacos 集群
微服务再启动的时候先读配置中心的配置,然后再读取本地的
yaml
配置。nacos
的地址需要在服务一启动的时候就读取。所以最好是将 nacos 的配置放再 bootstrap.yml 中。文章图片
spring:
application:
name: userserviceprofiles:
active: devcloud:
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 实现的重试机制
- URLConnection: 默认实现,不支持链接池
- Apache HttpClient: 支持连接池
- OKHttp: 支持连接池
feign:
client:
config:
default:
loggerLevel: BASIChttpclient:
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 filter(ServerWebExchange exchange, GatewayFilterChain chain) {
// 获取请求参数ServerHttpRequest request = exchange.getRequest();
MultiValueMap 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
推荐阅读
- =======j2ee|spring用注解实现注入的@resource,@autowired,@inject区别
- jar|springboot项目打成jar包和war包,并部署(快速打包部署)
- 数据库|效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中【附源代码下载】)...
- java人生|35K 入职华为Java开发那天,我哭了(这 5 个月做的一切都值了)
- Java毕业设计项目实战篇|Java项目:在线嘿嘿网盘系统设计和实现(java+Springboot+ssm+mysql+maven)
- 微服务|微服务系列:服务发现与注册-----Eureka(面试突击!你想了解的Eureka都在这里.持续更新中......)
- java|ApplicationListener和SpringApplicationRunListener的联系
- Spring|SpringSecurity--自定义登录页面、注销登录配置
- 性能|性能工具之 Jmeter 通过 SpringBoot 工程启动
- 代码狂魔|Spring源码分析之IOC容器初始化流程