nacos 配置中心
配置中心使用方式
1 引入依赖 spring-cloud-starter-alibaba-nacos-config
2 配置文件中添加 bootstrap.yaml
3 配置环境 服务名称 运行环境 配置注册中心 文件类型
spring:
application:
name: userservice # 服务名称
profiles:
active: dev #开发环境,这里是dev
cloud:
nacos:
server-addr: localhost:8848 # Nacos地址
config:
file-extension: yaml # 文件后缀名
4 代码添加业务逻辑读取 配置中心文件 热更新 用 @value 注入数据
实现热更新 需要使用的类上家@RefreshScope
或者直接 使用@ConfigurationProperties(prefix = “xxxx”)
注意要使用 @Data 和 @Component 不然其他类没法注入进去
配置共享文件 可以不加后缀 例如-dev 或者 -test
会资源共享
权重 带后缀的配置 >共享的配置 > 本地的配置
Feign远程调用
Feign是一个声明式的http客户端,可读性好,容易维护
使用方式
① 引入依赖
spring-cloud-starter-openfeign
② 添加@EnableFeignClients注解
启动类添加 注解
③ 编写FeignClient接口
@FeignClient(“userservice”)//被调用的服务名称
public interface UserClient {
@GetMapping(“/user/{id}”) //被调用的接口
User findById(@PathVariable(“id”) Long id);
}
④ 使用FeignClient中定义的方法代替RestTemplate
引入 接口 直接调用 接口中的方法
feign 的配置 日志级别
feign:
client:
config:
userservice: # 针对某个微服务的配置 如果真的全局 用default 可以全部服务 都用这个日志级别
loggerLevel: FULL # 日志级别
而日志的级别分为四种:
- NONE:不记录任何日志信息,这是默认值。
- BASIC:仅记录请求的方法,URL以及响应状态码和执行时间 开发中用这个即可
- HEADERS:在BASIC的基础上,额外记录了请求和响应的头信息
- FULL:记录所有请求和响应的明细,包括头信息、请求体、元数据。
也可以使用代码发方式
@Bean
public Logger.Level feignLogLevel(){
return Logger.Level.BASIC; // 日志级别为BASIC
}
如果全局生效 用在启动类注解上
defaultConfiguration = DefaultFeignConfiguration .class
如果局部生效 用在启动类注解上
configuration = DefaultFeignConfiguration .class
Feign的使用优化
Feign底层发起http请求,依赖于其它的框架。其底层客户端实现包括:
•URLConnection:默认实现,不支持连接池
•Apache HttpClient :支持连接池
•OKHttp:支持连接池
提高Feign的性能主要手段就是使用连接池代替默认的URLConnection
使用方式
1 引入依赖
feign-httpclient
2 配置连接池
feign:
client:
config:
default: # default全局的配置
loggerLevel: BASIC # 日志级别,BASIC就是基本的请求和响应信息
httpclient:
enabled: true # 开启feign对HttpClient的支持
max-connections: 200 # 最大的连接数
max-connections-per-route: 50 # 每个路径的最大连接数
feign 最佳实践 用自动装配实现
例如,将UserClient、User、Feign的默认配置都抽取到一个feign-api包中,所有微服务引用该依赖包,即可直接使用
1 新建工程 feign-api
2 引入feign 依赖 spring-cloud-starter-openfeign
3 加入 依赖的 pojo 和 feign接口clint 配置类
4 打包安装
5 使用方式 直接引入 feign-api 引入 注入feign 接口即可
Gateway服务网关
网关作用: 路由 权限 限流
主要作用
路由和负载均衡:一切请求都必须先经过gateway,但网关不处理业务,而是根据某种规则,把请求转发到某个微服务,这个过程叫做路由。当路由的目标服务有多个时,还需要做负载均衡。
限流 : 当访问过高是 在网关中按照下游的微服务能够接受的速度来放行请求
权限控制:网关作为微服务入口,需要校验用户是是否有请求资格
使用方式
1 引入依赖
网关依赖 spring-cloud-starter-gateway
nacos服务发现依赖 spring-cloud-starter-alibaba-nacos-discovery
2编写启动类
3 配置继承和路由规则
server:
port: 10010 # 网关端口
spring:
application:
name: gateway # 服务名称
cloud:
nacos:
server-addr: localhost:8848 # nacos地址
gateway:
routes: # 网关路由配置
- id: user-service # 路由id,自定义,只要唯一即可
# uri: http://127.0.0.1:8081 # 路由的目标地址 http就是固定地址
uri: lb://userservice # 路由的目标地址 lb就是负载均衡,后面跟服务名称
predicates: # 路由断言,也就是判断请求是否符合路由规则的条件 断言工厂有十多个
- Path=/user/** # 这个是按照路径匹配,只要以/user/开头就符合要求
filters: # 过滤器 粒子 过滤的请求添加了 请求头信息
- AddRequestHeader=Truth, Itcast is freaking awesome! # 添加请求头
过滤器的作用是什么?
① 对路由的请求或响应做加工处理,比如添加请求头
② 配置在路由下的过滤器只对当前路由的请求生效
defaultFilters的作用是什么?
① 对所有路由都生效的过滤器
全局过滤器
全局过滤器的作用也是处理一切进入网关的请求和微服务响应,与GatewayFilter的作用一样。区别在于GatewayFilter通过配置定义,处理逻辑是固定的;而GlobalFilter的逻辑需要自己写代码实现。
使用方式 定义方法 实现 GlobalFilter 接口
@Order(-1) order值越小,优先级越高,执行顺序越靠前。
跨域问题