Eureka注册中心:《使用IntelliJ IDEA创建Spring Cloud服务注册中心》
服务提供者创建:《使用IntelliJ IDEA创建Spring Cloud的Eureka Client》
Ribbon实现负载均衡:《使用IntelliJ IDEA创建Ribbon项目实现负载均衡》
集成Feign的项目:《使用IntelliJ IDEA创建集成Feign的项目简化服务调用的网络连接》
Ribbon项目中使用Hystrix熔断器:《使用IntelliJ IDEA在Spring Cloud的Ribbon项目中使用Hystrix熔断器》
Feign项目中使用Hystrix熔断器:《使用IntelliJ IDEA在Spring Cloud的Feign项目中使用Hystrix熔断器》
熔断器可视化监控项目:《使用IntelliJ IDEA创建Spring Cloud的熔断器可视化监控项目》
微服务架构中都必然会设计一个网关在里面,使得不用去关心后端具体有多少个服务,就只需知道一个网关,所有请求都往网关走,网关会根据请求中的一些特征,将请求转发给后端的各个服务。有一个网关之后,还有很多好处,比如可以做统一的降级、限流、认证授权、安全等。
Zuul的主要功能是路由转发和过滤器。例如将acyx/order转发到订单服务中,将acyx/product转发到商品服务中,将acyx/stock转发到库存服务中。Zuul默认和Ribbon结合实现了负载均衡的功能。针对过滤器,在Zuul中定义了四种不同生命周期的过滤器类型:pre:路由之前、routing:路由之时、post: 路由之后、error:发送错误调用,具体可以自定义Filter extends ZuulFilter,在run方法中添加过滤器的具体逻辑。
本文主要讲解Zuul的功能是路由转发。
创建Zuul项目
File---new---module---Spring Assistant
点击next
如下图,选择Zuul
点击Finish
配置Zuul项目
向pom.xml添加如下依赖,因为需要向eureka注册中心(acyxdiscovery)注册服务和获取其它服务相关信息
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
AcyxzuulApplication.java添加注解@EnableEurekaClient 、@EnableZuulProxy 注解
package com.acyx.zuul;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
@SpringBootApplication
@EnableEurekaClient
@EnableZuulProxy
public class AcyxzuulApplication {
public static void main(String[] args) {
SpringApplication.run(AcyxzuulApplication.class, args);
}
}
resources目录下新建application.yml,application.yml的功能和application.properties是一样的,但yml文件是树状结构,有更好的层次感,更易于理解。然后,删除原有的application.properties。如下图
application.yml
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
server:
port: 8850
spring:
application:
name: acyx-zuul
zuul:
routes:
feign:
path: /feign/** # 自定义的路由
serviceId: acyx-feign # 指向的服务名称
测试项目
依次启动Eureka注册中心、acyxstock、acyxstocktwo、acyxfeignthree、acyxzuul,然后在浏览器中访问:http://127.0.0.1:8761
在浏览器中直接访问acyxfeignthree : http://localhost:8102/homeFeign?name=test
刷新
再次刷新
此时,acyxfeignthree对应的acyx-feign服务是正常的。下面开始测试一下Zuul的路由网关功能。
在浏览器的新选项卡输入http://localhost:8850/feign/homeFeign?name=test
刷新
再次刷新
因此,说明Zuul路由网关起作用了。