项目演示
新建一个项目,作为服务网关
依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
<version>2.1.0.RC2</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>2.1.0.RC2</version>
</dependency>
application.yml配置:
# 配置zuul项目端口
server:
port: 9527
# 配置zuul项目名
spring:
application:
name: zuul-app
eureka:
instance:
# 当前zuul也是一个eureka实例
instance-id: gateway-9527.com
prefer-ip-address: true
client:
service-url:
# 配置注册中心地址
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
主启动类配置:
@SpringBootApplication
// 开启zuul代理
@EnableZuulProxy
public class ZuulApp {
public static void main(String[] args) {
SpringApplication.run(ZuulApp.class, args);
}
}
为什么是@EnableZuulProxy?
在加入了服务网关后,网关可以做代理服务访问。
application.yml中配置的当前项目(zuul)的端口是9527,所以访问localhost:9527就能访问的到当前zuul了,zuul作为客户端注册进eureka中,可以获取注册中心的所有服务,有了zuul,其他服务的访问都可以走zuul代理。例如有一个服务名为provider,提供了/dept/1接口,要访问这个provider的这个接口,可以这样访问localhost:9527/provider/dept/1。即zull的 ip:port/服务名/服务接口。
zuul的配置
application.yml
server:
port: 9527
spring:
application:
name: zuul-app
eureka:
instance:
instance-id: gateway-9527.com
prefer-ip-address: true
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
zuul:
# 定义路由策略
routes:
# p只是一个标识,用来把serviceId和对应的path绑定
# 指定服务 值是服务名
p.serviceId: provider
# 指定服务请求路径
p.path: /mydept/**
# ignored-services指定要忽略的服务,及不能通过服务名来访问了,要通过path值来访问
ignored-services: provider
没配置路由的情况下要通过服务名的方式调用服务,在配置路由后,通过配置的路由的path值来调用服务。ignored-services: 这个属性就是用来控制是否能用服务名访问的,如果要设置所有的服务都不能通过服务名访问的话可以设置ignored-services: “*”
可以为路由设置统一的前缀
zuul:
routes:
p.serviceId: provider
p.path: /mydept/**
ignored-services: provider
prefix: /demo
访问相当于ip:port/demo/mydept/**。前面的/不能省略。