nacos配置中心和gateway网关
前言
涉及到springcloud都要注册到nacos中
微服务配置中心
引入依赖
- 一般的我们要将服务注册到配置中心,需要服务发现的依赖,其次,如果你需要nacos管理配置,则需要配置中心依赖。
<!-- 服务注册/发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 配置中心来做配置管理 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
创建配置文件
- nacos创建配置文件,命名规范为服务名-环境.properties
- 每个微服务都需要注册nacos,被nacos所识别发现
spring:
application:
name: rainbow-oms
# datasource:
# username: root
# password: 123456
# url: jdbc:mysql://192.168.237.130:3306/enjoyment_oms?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false
# driver-class-name: com.mysql.cj.jdbc.Driver
cloud:
nacos:
discovery:
server-addr: localhost:8848
- 在微服务创建bootstrap.properties,优先级高
需要指定配置nacos地址和服务名,让nacos识别
spring.cloud.nacos.config.server-addr=localhost:8848
spring.application.name=rainbow-oms
扫描bootstrap.properties文件,识别配置地址和名字,去nacos中查找,然后读取相应的配置文件
加入注解
- @RefreshScope:修改nacos配置文件的内容,会实时变化
@RestController
@RequestMapping("oms/order")
@RefreshScope
public class OrderController {
@Autowired
private OrderService orderService;
@Autowired
private PmsFeign pmsFeign;
@Value("${user.name}")
private String name;
@Value("${user.pwd}")
private Integer pwd;
@GetMapping("/testFeign")
public R testFeign(){
R r = pmsFeign.testFeign();
return r.put("name",name).put("pwd",pwd);
}
其他细节
命名空间
应用场景,项目分生产,开发,测试,我们可以用命名空间隔离
- 新建命名空间
- 使用
- bootstrap加上spring.cloud.nacos.config.namespace=1852a9aa-fd14-463b-a519-040cf460467a指定命名空间,就会读取该命名空间下的配置文件
配置分组
-
group就是配置分组,我们也可以指定组下面的文件
同一命名空间,不同分组
-
bootstrap加上spring.cloud.nacos.config.group=dev可以指定分组
通常每个微服务中有不同命名空间,然后每个微服务的环境使用不同分组(dev,pro,test)
指定读取配置文件
- 可以在bootstrap中指定要读取的文件
- 注释datasource配置,在nacos新建配置
- bootstrap
spring.cloud.nacos.config.server-addr=localhost:8848
spring.application.name=rainbow-oms
spring.cloud.nacos.config.namespace=1852a9aa-fd14-463b-a519-040cf460467a
spring.cloud.nacos.config.group=dev
#指定额外读取配置文件
spring.cloud.nacos.config.ext-config[0].data-id=datasource.yml
spring.cloud.nacos.config.ext-config[0].group=dev
#动态刷新
spring.cloud.nacos.config.ext-config[0].refresh=true
- 最后访问同样可以
gateway网关
简单入门
- 依赖
<!-- gateway网关-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
- 注册nacos,nacos发现地址和服务名,和nacos config配置地址和服务名
- 配置断言规则,
部分配置省略
spring:
application:
name: rainbow-gateway
cloud:
nacos:
discovery:
server-addr: localhost:8848
gateway:
routes:
- id: query_test
uri: https://www.baidu.com
# 断言 http://localhost:88/?url=baidu 拦截请求路径参数有url=baidu就会跳转百度
predicates:
- Query=url,baidu
- http://localhost:88/?url=baidu 访问,跳转百度
负载均衡
-
通常前端是只有一个地址的,当访问这个地址,请求可以转发到不同的微服务
-
前端地址 window.SITE_CONFIG[‘baseUrl’] = ‘http://localhost:88/api’;
-
人人开源默认的验证码请求地址是:http://localhost:8080/renren-fast/captcha.jpg?uuid=xxxxx
gateway配置
spring:
application:
name: rainbow-gateway
cloud:
nacos:
discovery:
server-addr: 192.168.237.130:8848
gateway:
routes:
- id: renren_fast_route
uri: lb://renren-fast
# 断言判断路径中是否有api,如果有就转发到http://renren-fast(localhost):8080/api/**
predicates:
- Path=/api/**
# 但此时路径中会凭接/api/**,我们需要重写路径http://renren-fast(localhost):8080/renren-fast/**
filters:
- RewritePath=/api/(?<segment>/?.*), /renren-fast/$\{segment}
看注释这里的重写是按/api/** 重写为 /renren-fast/**