SpringCloud学习(八)使用gateway作为服务网关-服务注册与发现
1、服务注册与发现
gateway作为网关,和各个分布式服务是存在关联的,通过配置,可以直接通过特定的url访问到各个分布式服务内部数据
apllication.yml信息
server:
port: 8766
spring:
cloud:
gateway:
discovery:
locator:
#表明gateway开启服务注册和发现的功能,并且spring cloud gateway自动根据服务发现为每一个服务创建了一个router,这个router将以服务名开头的请求路径转发到对应的服务
enabled: true
#将请求路径上的服务名配置为小写(因为服务注册的时候,向注册中心注册时将服务名转成大写的了)
lower-case-service-id: true
#比如以/spring-cloud-demo1/*的请求路径被路由转发到服务名为spring-cloud-demo1的服务上。
eureka:
client:
service-url:
defaultZone: http://localhost:9999/eureka/
访问url : http://127.0.0.1:8766/spring-cloud-demo1/getDemoInfo
可得相应结果
上述路径必带spring-cloud-demo1但是太长,而且某些需求可能不需要展示这个路径,则自定义路径
application.yml信息
server:
port: 8766
spring:
cloud:
gateway:
discovery:
locator:
#表明gateway开启服务注册和发现的功能,并且spring cloud gateway自动根据服务发现为每一个服务创建了一个router,这个router将以服务名开头的请求路径转发到对应的服务
enabled: true
#将请求路径上的服务名配置为小写(因为服务注册的时候,向注册中心注册时将服务名转成大写的了)
lower-case-service-id: true
#比如以/spring-cloud-demo1/*的请求路径被路由转发到服务名为spring-cloud-demo1的服务上。 */
routes:
- id: spring-cloud-demo1
#lb://spring-cloud-demo1即服务名为spring-cloud-demo1的负载均衡地址
uri: lb://spring-cloud-demo1
#路由转发匹配路径,相当于请求127.0.0.1:8766/demo/** -> spring-cloud-demo1的负载均衡地址/demo/**
predicates:
- Path=/demo/**
#过滤器删除前一个地址spring-cloud-demo1的负载均衡地址/**
filters:
- StripPrefix=1
eureka:
client:
service-url:
defaultZone: http://localhost:9999/eureka/
访问url: http://127.0.0.1:8766/demo/getDemoInfo
当然此时访问url: http://127.0.0.1:8766/spring-cloud-demo1/getDemoInfo
也是有效的,如果想让上面url失效,只需要设置
spring:
cloud:
gateway:
discovery:
locator:
enabled: false
即可