SpringCloud总结2
文章目录
一、Nacos配置管理
官网:https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
1.1 配置Nacos配置中心
① 添加Nacos配置
②添加配置中心依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
③创建bootstrap.yml,编写配置
bootstrap.yml会在类启动前加载配置
服务名、环境、地址、文件后缀名缺一不可
spring:
application:
name: userservice # 服务名称
profiles:
active: dev #开发环境,这里是dev
cloud:
nacos:
config:
server-addr: localhost:8848 # Nacos地址
file-extension: yaml # 文件后缀名
④配置完成后,会自动根据配置地址拉取线上配置
1.2 配置热更新
- 方式一:属性配置
在@Value注入的变量所在类上添加注解@RefreshScope
@RestController
@RefreshScope
public class example{
@Value("${classes.name}")2cr
}
- 方式二: 配置类
使用@ConfigurationProperties注解代替@Value注解
将所需属性单独做一个配置类,加上@ConfigurationProperties注解即可
@Component
@Data
@ConfigurationProperties(prefix = "name")
public class NameProperties {
private String name;
}
1.3 多环境配置共享
1.概念:配置中不加环境,则可以被多环境共享
2.实现:
二、Nacos集群搭建
流程:
1.初始化相应数据库
2.配置Nacos
①在nginx中打开/conf/application.properties文件,并进行以下配置
②配置集群信息
重命名/nacos/conf文件夹下cluster.conf.example文件为cluster.conf,并配置
增加节点地址
Nacos2.x版本需要保证节点之间的端口号差值至少是2
3.搭建nacos集群
将刚刚配置的nacos进行复制,修改端口号即可
4.启动
进入nginx/bin,运行startup.cmd启动nacos
5.nginx反向代理
编辑/nginx/conf/nginx.conf文件
upstream nacos-cluster {
server 127.0.0.1:8845;
server 127.0.0.1:8846;
server 127.0.0.1:8847;
}
server {
listen 8848;
server_name localhost;
location /nacos {
proxy_pass http://nacos-cluster;
}
}
配置完成后,可以通过http://localhost:8848/nacos访问nacos
三、Feign
官网:https://github.com/OpenFeign/feign
1.概念:以Java接口注解的方式调用Http请求,Feign通过处理注解,将请求模板化,当实际调用的时候,传入参数,根据参数再应用到请求上,进而转化成真正的请求
2.快速入门:
①引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
②在启动类上添加注解**@EnableFeignClients**开启Feign的功能
③编写Feign的客户端
@FeignClient("userservice")
public interface UserClient {
/**
* 获取用户信息
*
* @param id
* @return
*/
@GetMapping("/user/{id}")
User getById(@PathVariable Long id);
}
④应用与代码中
在需要调用用户信息的类中注入userClient,并使用
@Autowired
private UserClient userClient
public Order queryOrderById(Long orderId){
Order order = order.Mapper.findById(orderId);
//使用UserClinet
User user = userClinet.getById(order.getUserId);
order.setUser(user);
return order;
}
3.性能优化–配置Feign底层http请求客户端
①引入依赖
<!--httpClient的依赖 -->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
</dependency>
②配置连接池,实现优化
feign:
client:
config:
default: # default全局的配置
loggerLevel: BASIC # 日志级别,BASIC就是基本的请求和响应信息
httpclient:
enabled: true # 开启feign对HttpClient的支持
max-connections: 200 # 最大的连接数
max-connections-per-route: 50 # 每个路径的最大连接数
四、SpringCloudGateway(网关)
4.1 概念:
1.所有微服务的统一入口
2.功能:
- 权限控制:校验用户是否有请求资格
- 路由:一切请求都要经过网关转发到微服务
- 负载均衡:路由的目标有多个时,需要做负载均衡
- 限流:网关按照微服务可接受的速度来放行请求
4.2快速入门
1.导入依赖
<!--网关-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--nacos服务发现依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2.编写网关启动类
3.编写基础配置、路由
路由:配置断言、过滤器…
断言工厂
过滤器
-默认:default-filters(对全局生效)
-局部: filters
-全局过滤器(自定义过滤器):1.自定义类实现GlobalFilter接口 2.加上@Component注解 3.实现filter()方法
例子:
server:
port: 10010 # 网关端口
spring:
application:
name: gateway # 服务名称
cloud:
nacos:
server-addr: localhost:8848 # nacos地址
gateway:
routes: # 网关路由配置
- id: user-service # 路由id,自定义,只要唯一即可
uri: lb://userservice # 路由的目标地址 lb就是负载均衡,后面跟服务名称
predicates: # 路由断言,也就是判断请求是否符合路由规则的条件
- Path=/user/** # 这个是按照路径匹配,只要以/user/开头就符合要求
4.访问http://localhost:10010/user/… 进行测试
4.3 网关cors跨域配置
spring:
cloud:
gateway:
# 。。。
globalcors: # 全局的跨域处理
add-to-simple-url-handler-mapping: true # 解决options请求被拦截问题
corsConfigurations:
'[/**]':
allowedOrigins: # 允许哪些网站的跨域请求
- "http://localhost:8090"
allowedMethods: # 允许的跨域ajax的请求方式
- "GET"
- "POST"
- "DELETE"
- "PUT"
- "OPTIONS"
allowedHeaders: "*" # 允许在请求中携带的头信息
allowCredentials: true # 是否允许携带cookie
maxAge: 360000 # 这次跨域检测的有效期