0 前言
Zuul,在Spring Cloud 2020.0.3以后,不在包含。多数示例已经不能使用。选型后,排除Soul,Nginx+Lua,选择了Spring Cloud GateWay。
在《Spring Cloud 二》基础上,
对每个示例的服务示例的端口做了调整:
- 8000 springcloud-eureka-server
- 8001 springcound-config-server
- 8002 springcloud-eureka-servicesupport
- 8003 springcloud-eureka-ribbonconsumer
- 8004 springcloud-eureka-feignconsumer
- 8005 spring-cloud-config-client
- 8006 spring-cloud-hystrix-dashboard
- 8007 com.yun.gateway
1 代码截图
2 pom
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
3 bootstrap
server:
port: 8007
spring:
application:
name: gateway-service
cloud:
config:
name: ${spring.application.name} #对应config server Url中的{application}
profile: dev
discovery:
enabled: true #启用服务发现
service-id: spring-cloud-config-server #指定要从eureka获取的config server的服务ID(即:configserverr的applicationName)
gateway:
filter:
remove-non-proxy-headers:
headers:
- dummy
routes:
- id: apiuser #配置了一个路由apiuser
# 重点!/info必须使用http进行转发,lb代表从注册中心获取服务
uri: lb://eureka-support
predicates:
# 重点!转发该路径!,/userapi/**,
- Path=/provider/**
# http://localhost:6601/userapi/user/users/2, 必须加上StripPrefix=1,否则访问服务时会带上userapi
#而不是我们期望的去掉userapi,只保留**部分
filters:
- StripPrefix=1
- id: api2user
uri: lb://user-service
predicates:
- Path=/userapi2/**
filters:
- StripPrefix=1
management:
endpoints:
web:
exposure:
include: "*" #暴露所有端口,也可以指定某一个环境(先management.endpoint.{profile}.enabled=true,然后这里指定这个{profile},多个用,分隔)
eureka:
client:
service-url:
defaultZone: "http://${eureka.instance.hostname}:8000/eureka/"
instance:
hostname: localhost
4、GatewayApplication
@SpringBootApplication
@EnableDiscoveryClient
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class,args);
}
}
5、测试
- 启动 server,config,support,然后启动gateway
- 访问:http://localhost:8000/
- 访问:http://localhost:8002/support/hello?name=中国
- 访问: http://localhost:8007/provider/support/hello?name=中国aa