文章目录
- 1. 基本配置
- 2. 静态路由
- 3. 动态路由
- 4. 开启网关拉取nacos服务
- 参考
1. 基本配置
1.导包
<dependency><groupId>org.springframework.cloudgroupId><artifactId>spring-cloud-starter-gatewayartifactId>
dependency>
<dependency><groupId>com.alibaba.nacosgroupId><artifactId>nacos-clientartifactId><version>1.1.1version>
dependency>
<dependency><groupId>org.springframework.cloudgroupId><artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId><version>0.2.2.RELEASEversion>
dependency>
2.编写启动类
&#64;SpringBootApplication
public class GateWayApp {public static void main(String[] args) {SpringApplication.run(GateWayApp.class,args);}
}
3.编写配置文件
server:port: 80
spring:application:name: GATEWAY&#61;SERVER
cloud:gateway:routes:- id: NACOS-CONSUMERuri: http://localhost:8000predicates:- Path&#61;/hello/**
功能和nginx类似&#xff0c;当发送http://localhost:80/hello/find&#xff0c;会被重定向为http://localhost:8000/hello/find
2. 静态路由
刚刚写的配置文件中的服务地址是写死的&#xff0c;如果服务端口这些发生改变&#xff0c;配置文件也要跟着改变。
修改一个静态配置&#xff0c;如下图&#xff0c;修改端口为8001&#xff1a;
- id: NACOS-CONSUMERuri: http://localhost:8001predicates:- Path&#61;/hello
当发送http://localhost:80/hello/find&#xff0c;会被重定向为http://localhost:8001/hello/find
3. 动态路由
静态路由存在的缺点就是当服务发生变化时&#xff0c;例如端口发生变化&#xff0c;此时需要重新配置&#xff0c;比较麻烦。此时&#xff0c;可以采用动态路由&#xff0c;通过注册中心进行服务发现&#xff0c;当目录服务发生变化时&#xff0c;自动获取最新的服务信息。
1.在yaml配置文件中增加对应的注册中心地址&#xff1a;
nacos:discovery:server-addr: 127.0.0.1:8848
2.将静态地址改成动态&#xff0c;将uri属性改为lb://服务实例名称
- id: NACOS-CONSUMERuri: lb://NACOS-PROVIDERpredicates:- Path&#61;/hello
注意&#xff0c;此时 uri由静态的url 改为了 lb://NACOS-PROVIDER&#xff0c;当用户访问consumer的url http://localhost:80/hello/find时&#xff0c;会从注册中心查找NACOS-PROVIDER服务信息&#xff0c;假设NACOS-PROVIDER服务有多个实例&#xff0c;分别为8001和8002&#xff0c;此时会转为&#xff1a;
交替&#xff0c;负载均衡&#xff1a;
http://localhost:8001/hello/find
http://localhost:8002/hello/find
4. 开启网关拉取nacos服务
在第三章节&#xff0c;通过动态路由&#xff0c;我们可以使用负载均衡功能&#xff0c;但是仍存在问题&#xff0c;一个服务如果存在多个url&#xff0c;那么我要配置多个predicates&#xff0c;这样很累&#xff0c;有没有简化配置&#xff1f;
可以。
locator.enabled 默认为false&#xff0c;设置为true表示开启通过微服务创建路由的功能&#xff0c;即可以通过微服务名访问服务
discovery:locator:enabled: true
完整的配置入下&#xff1a;
spring:application:name: gateway-servercloud:nacos:discovery:
server-addr: 127.0.0.1:8848gateway:discovery:locator:enabled: true
http://localhost:80/NACOS-PROVIDER/hello/find
参考
springCloud微服务组件&#xff1a;Gateway&#xff08;网关&#xff09;
springcloud gateway: discovery: locator: enabled: true 解释