什么是网关?
通过网关,可以把所有微服务整合起来,通过一个端口访问。是后端服务的聚合点。
网关三大核心概念
父工程pom文件,注意,千万不要在父工程中引入spring-boot-starter-web依赖,否则会出现404的情况,无法通过网关访问到其他微服务
org.springframework.boot
spring-boot-starter-parent
2.0.6.RELEASE
UTF-8
UTF-8
1.8
Finchley.RELEASE
org.springframework.cloud
spring-cloud-dependencies
Finchley.RELEASE
pom
import
网关gateway微服务pom文件
org.springframework.boot
spring-boot-starter
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.cloud
spring-cloud-starter-gateway
org.springframework.boot
spring-boot-starter-actuator
二、网关的application.yml文件的编写
前提:demo-goods服务已经注册到注册中心,有一个http://localhost:8082/goods/hello的端口可以访问
@RestController
@RequestMapping(value = "/goods",
produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public class GoodsController {
@GetMapping(value = "/hello")
String hello(){
return "hello world!";
}
}
网关的application.yml文件
其中routes是路由配置,可以配置多个路由,id是每个路由的名称,可以自己定义。
predicates是断言,当访问的路径带有/goods时,要去注册中心寻找demo-goods微服务,找到该微服务中/goods接口的请求。
注意:网关的启动类需要加@EnableDiscoveryClient 注解,否则uri就找不到demo-goods这个微服务了
server:
port: 80
spring:
application:
name: spring-gateway
cloud:
gateway:
discovery:
locator:
enabled: true
#微服务名称大写转小写,因此下面lb://可以用小写描述服务名
lower-case-service-id: true
routes:
#id可以任意设置
- id: demo-goods
#路由断言:当包含/goods路径时,直接跳转到http://127.0.0.1:8082,建议不要写死,写注册在eureka上的服务名
uri: lb://demo-goods
predicates:
- Path=/goods/**
#路由断言:当包含/goods路径时,直接跳转到http://127.0.0.1:8082,建议不要写死,写注册在eureka上的服务名
#Method 路由断言工厂
eureka:
instance:
prefer-ip-address: true
instance-id: ${spring.cloud.client.ip-address}:${server.port}
#开放所有页面节点 默认只开启了health、info两个节点
management:
endpoints:
web:
exposure:
include: '*'
除了特定路径外,可以设置时间通过网关。下面的例子表示在这个时间段内可以匹配到此路由【http://ityouknow.com】。
spring:
cloud:
gateway:
routes:
- id: after_route
uri: http://ityouknow.com
predicates:
- Between=2018-01-20T06:06:06+08:00[Asia/Shanghai], 2019-01-20T06:06:06+08:00[Asia/Shanghai]
还可以组合使用:
组合cookie host 请求方式 请求路径 请求参数 ip地址
spring:
cloud:
gateway:
routes:
- id: host_foo_path_headers_to_httpbin
uri: http://ityouknow.com
predicates:
- Host=**.foo.org
- Path=/headers
- Method=GET
- Header=X-Request-Id, \d+
- Query=foo, ba.
- Query=baz
- Cookie=chocolate, ch.p
- After=2018-01-20T06:06:06+08:00[Asia/Shanghai]