如果我们打开天猫APP想购买一件商品,从搜索、商品展示、购物车、下单、支付、订单中心、物流详情等等一系列的功能,前台一气呵成,用户不需要关心后端到底做了什么,但是后端可能会调用不同的服务才能完成这一系列的操作需求。
如果客户端直接和微服务进行通信,会存在以下诸多问题:
于是微服务网关应运而生,以上问题,都可以通过网关解决。网关是介于客户端和多个微服务的中间层,所有的客户端请求都会先经过网关,如下图所示:
Zuul是从设备和网站到Netflix流应用的后端的所有请求的前门。 作为边缘服务应用程序,Zuul旨在实现动态路由,监控,弹性和安全性。 它还可以根据需要将请求路由到多个Amazon Auto Scaling Groups。
Zuul使用一系列不同类型的过滤器,使我们能够快速灵活地将功能应用于我们的边缘服务。 这些过滤器可帮助我们执行以下功能:
maven依赖:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Edgware.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
启动类:
/**
* 网关服务
* 创建者 小柒2012
* 创建时间 2017年4月18日
* linux 下 后台启动 nohup java -jar getway.jar &
*/
@SpringBootApplication
@EnableZuulProxy
public class ZuulApplication {
private final static Logger logger = LoggerFactory.getLogger(ZuulApplication.class);
public static void main(String[] args) throws Exception {
SpringApplication.run(ZuulApplication.class, args);
logger.info("ZuulProxy Start Success");
}
}
配置application.properties:
server.port=9001
spring.application.name=itstyle_gateway
zuul.routes.api-pay-url.path=/pay/**
zuul.routes.api-pay-url.url=http://localhost:8080/
zuul.routes.api-user-url.path=/user/**
zuul.routes.api-user-url.url=http://localhost:8081/
zuul.routes.api-order-url.path=/order/**
zuul.routes.api-order-url.url=http://localhost:8082/
zuul.routes.api-shop-url.path=/shop/**
zuul.routes.api-shop-url.url=http://localhost:8083/
当然,以上应该是最简单的网关服务了,随着微服务的增多,我们不可能再去手动维护一个个路由配置,后面我们将会引入Eureka实现服务的注册发现。