在SpringCloud中了提供了基于Netflix Zuul实现的API网关组件Spring Cloud Zuul。
SpringCloud Zuul可以通过与SpringCloud Eureka进行整合,将自身注册为Eureka服务治理下的应用,同时从Eureka中获得了所有其他微服务的实例信息。这样的设计非常巧妙地将服务治理体系中维护的实例信息利用起来,使得将维护服务实例的工作交给了服务治理框架自动完成,不再需要人工介入。
SpringCloud Zuul提供了一套过滤器机制,它可以 很好地支持这样的任务。开发者可以通过使用Zuul来创建各种校验过滤器,然后指定哪些规则的请求需要执行校验逻辑,只有通过校验的才会被路由到具体的微服务接口,不然就返回错误提示。通过这样的改造,各个业务层的微服务应用就不再需要非业务性质的校验逻辑了,这使得我们的微服务应用可以更专注千业务逻辑的开发,同时微服务的自动化测试也变得更容易实现。
pom.xml
1 2 3 4 5 6 7 8 9
| <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency>
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
|
application.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| eureka: client: service-url:
defaultZone: http://localhost:7001/eureka/
server: port: 7005
spring: application: name: service-zuul
zuul: routes:
api-a: path: /api-a/** serviceId: service-producer
api-b: path: /api-b/** serviceId: service-producer
github: path: /github/** url: https://github.com/
|
ServiceZuulApplication.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| package com.linjian.servicezuul;
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.cloud.netflix.zuul.EnableZuulProxy; import org.springframework.cloud.netflix.zuul.EnableZuulServer;
@EnableEurekaClient @EnableDiscoveryClient @EnableZuulProxy @SpringBootApplication public class ServiceZuulApplication {
public static void main(String[] args) { SpringApplication.run(ServiceZuulApplication.class, args); }
}
|
测试:
启动eureka-server、service-producer、service-zuul
访问 http://localhost:7005/github/Delena
访问 http://localhost:7005/api-a/hello?name=linjian