1.Nacos配置管理
Nacos除了可以做注册中心,同样可以做配置管理来使用。当微服务数量多时,可以使用统一配置管理方案,来集中管理所有实例的配置配置变更时,可以实现热更新
1.1Q1:如何在nacos中添加配置文件
Q2:如何从微服务拉取配置
微服务要拉取nacos中的配置,且与本地的配置文件合并,共同完成项目启动问题1:如果不读取本地配置文件又如何知晓远程地址答:Spring引入一个新的配置文件:bootstrap.yaml文件,会在本地配置文件被读取前优先读取
实例
1.导入nacos-config依赖2.添加bootstrap.yaml3.这里会根据spring.cloud.nacos.server-addr获取nacos地址,再根据${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}作为文件id,来读取配置。解释:如下图4.在controller层添加业务逻辑,读取nacos配置
1.2.配置热更新
不需要重启服务,既可以让修改的配置生效
配置热更新的两种方式
- @Value注入的变量所在类上添加注解@RefreshScope
- 使用@ConfigurationProperties注解代替@Value注解。
方法二
package cn.itcast.user.config;import lombok.Data;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.stereotype.Component;@Component@Data@ConfigurationProperties(prefix = "pattern")public class PatternProperties {private String dateformat;}
在UserController中使用这个类代替@Value:
微服务启动时,会去nacos读取多个配置文件,例如:
- [spring.application.name]-[spring.profiles.active].yaml,例如:userservice-dev.yaml
- [spring.application.name].yaml,例如:userservice.yaml
而[spring.application.name].yaml不包含环境,因此可以被多个环境共享。
2.feign远程调用
1.使用restTemplet缺点
存在下面的问题:
•代码可读性差,编程体验不统一
•参数复杂URL难以维护
2.修改步骤
1)引入依赖spring-cloud-starter-openfeign
2)添加注解 :在order-service的启动类添加注解开启Feign的功能:@EnableFeignClients
3)编写Feign的客户端:在order-service中新建一个接口,内容如下:
package cn.itcast.order.client;
import cn.itcast.order.pojo.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@FeignClient("userservice")
public interface UserClient {
@GetMapping("/user/{id}")
User findById(@PathVariable("id") Long id);
}
4)使用FeignClient中定义的方法代替RestTemplate
2.2.自定义配置
2.2.1.配置文件方式:基于配置文件修改feign的日志级别可以针对单个服务:
feign:
client:
config:
userservice: # 针对某个微服务的配置
loggerLevel: FULL # 日志级别
也可以针对所有服务:
feign:
client:
config:
default: # 这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置
loggerLevel: FULL # 日志级别
2.2.2.Java代码方式
也可以基于Java代码来修改日志级别,先声明一个类,然后声明一个Logger.Level的对象:
public class DefaultFeignConfiguration {
@Bean
public Logger.Level feignLogLevel(){
return Logger.Level.BASIC; // 日志级别为BASIC
}
}
如果要全局生效,将其放到启动类的@EnableFeignClients这个注解中:
@EnableFeignClients(defaultConfiguration = DefaultFeignConfiguration .class)
如果是局部生效,则把它放到对应的@FeignClient这个注解中:
@FeignClient(value = "userservice", configuration = DefaultFeignConfiguration .class)
2.3feign优化使用
总结,Feign的优化:
1. 日志级别尽量用basic
2.使用HttpClient或OKHttp代替URLConnection
① 引入feign-httpClient依赖
② 配置文件开启httpClient功能,设置连接池参数
3.Gateway服务网关
是什么:
服务的守门神,所有微服务的统一入口。
权限控制:网关作为微服务入口,需要校验用户是是否有请求资格,如果没有则进行拦截。
路由和负载均衡:一切请求都必须先经过gateway,但网关不处理业务,而是根据某种规则,把请求转发到某个微服务,这个过程叫做路由。当然路由的目标服务有多个时,还需要做负载均衡。
限流:当请求流量过高时,在网关中按照下流的微服务能够接受的速度来放行请求,避免服务压力过大。
操作步骤
1)创建gateway服务,引入依赖
2)编写启动类
3)编写基础配置和路由规则
我们将符合Path 规则的一切请求,都代理到 uri参数指定的地址。
本例中,我们将 /user/**开头的请求,代理到lb://userservice,lb是负载均衡,根据服务名拉取服务列表,实现负载均衡。
