《 zuul微服务网关的代理、路由、过滤及访问映射规则配置 》
前言
在上一篇文章中,主要完成了 《 Hystrix-Dashboard实时服务调用情况监控 》,并且完成了 《 zuul 基本理论概述 》 对 zuul 进行了详细的简介,本篇将带领读者使用 zuul 来完成服务的代理、路由、过滤及访问映射规则配置,本篇博客主要主要涉及模块,包括:
- 新增 zuul 路由服务器模块,服务名称为 “ microservice-zuul-6001 ”;
zuul实现服务的代理、路由、过滤及访问映射规则配置
1、zuul 路由基本配置
1)、新增 zuul 路由服务器,服务名称 “ microservice-zuul-6001 ”
POM 内容创建,主要新增对 “ zuul ” 的支持,完整内容如下:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.huazai.springcloud</groupId>
<artifactId>microservice</artifactId>
<version>${project.version}</version>
</parent>
<artifactId>microservice-zuul-6001</artifactId>
<description>zuul 路由网关模块-6001</description>
<dependencies>
<!-- 引入自己定义的api通用包 -->
<dependency>
<groupId>com.huazai.springcloud</groupId>
<artifactId>microservice-api</artifactId>
<version>${project.version}</version>
</dependency>
<!-- zuul路由网关 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<!-- actuator监控 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- hystrix容错 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<!-- spring boot 相关 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!-- 热部署插件 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies>
</project>
YML 配置文件如下:
server:
port: 6001
spring:
application:
name: micsroservice-zuul
eureka:
client: #客户端注册进eureka服务列表内
service-url:
defaultZone: http://www.eureka7001.com:7001/eureka/,http://www.eureka7002.com:7002/eureka/,http://www.eureka7003.com:7003/eureka/
instance:
instance-id: microservice-zuul-6001
prefer-ip-address: true
info:
app.name: learning-microservice-springcloud
company.name: huazai-studio
build.artifactId: $project.artifactId$
build.version: $project.version$
修改主启动类,新增注解 “ @EnableZuulProxy ” 开启 zuul 代理,完整内容如下:
package com.huazai.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
/**
*
* @author HuaZai
* @contact [email protected]
* <ul>
* @description
* <li>zuul 路由网关
* </ul>
* @className MicroserviceZuulApp_6001
* @package com.huazai.springcloud
* @createdTime 2018年06月06日 下午2:21:44
*
* @version V1.0.0
*/
@SpringBootApplication
@EnableZuulProxy
public class MicroserviceZuulApp_6001
{
public static void main(String[] args)
{
SpringApplication.run(MicroserviceZuulApp_6001.class, args);
}
}
zuul 路由服务模块创建完成后,如下图:
测试 zuul 路由基本配置:
首先启动 Eureka 集群,再启动一台提供者服务器,最后启动该路由服务器模块,启动成功后,如下图:
启用路由,通过 zuul 路由访问服务提供者服务器,访问地址合成 “ 路由地址 + 服务器提供者应用名称 + 访问的 Base Uri + 接口地址 ” ,如下图:
2、路由访问规则映射
修改 “ microservice-zuul-6001 ” 路由模块
1)、配置路由代理,自定义访问代理名称,例如:现在需要将原名称 “ microservice-provider ” 自定义为 “ java98k ” ,完整内容如下:
server:
port: 6001
spring:
application:
name: micsroservice-zuul
eureka:
client: #客户端注册进eureka服务列表内
service-url:
defaultZone: http://www.eureka7001.com:7001/eureka/,http://www.eureka7002.com:7002/eureka/,http://www.eureka7003.com:7003/eureka/
instance:
instance-id: microservice-zuul-6001
prefer-ip-address: true
zuul:
routes:
microservice.serviceId: microservice-provider
microservice.path: /java98k/**
info:
app.name: learning-microservice-springcloud
company.name: huazai-studio
build.artifactId: $project.artifactId$
build.version: $project.version$
注意:这儿的数据结构类型为 Map ,其 K 值前缀可以自定义,但是必须一致,其后使用 “ serviceId ” 指定原服务名称,使用 “ path ” 来自定现在自定义的代理的名称,可以参看源码进行了解,只要知道其配置规则后就可以如鱼得水了,如下图:
现在访问服务器,可以通过原代理名称和现在自定义的代理名称也可以正常访问了,如下图:
2)、隐藏代理名称
最好的解决办法就是忽略掉原来的真实的代理名称,使通过原代理名称不可访问即可,通过 “ zuul.ignored-services: 原代理名称” 即可,完整内容如下:
server:
port: 6001
spring:
application:
name: micsroservice-zuul
eureka:
client: #客户端注册进eureka服务列表内
service-url:
defaultZone: http://www.eureka7001.com:7001/eureka/,http://www.eureka7002.com:7002/eureka/,http://www.eureka7003.com:7003/eureka/
instance:
instance-id: microservice-zuul-6001
prefer-ip-address: true
zuul:
ignored-services: microservice-provider # 忽略单个服务ID
# ignored-services: "*" # 忽略多个服务ID
routes:
microservice.serviceId: microservice-provider
microservice.path: /java98k/**
info:
app.name: learning-microservice-springcloud
company.name: huazai-studio
build.artifactId: $project.artifactId$
build.version: $project.version$
注意:在忽略单个代理名称时,可以使用具体的代理名称即可,如果是需要忽略多个代理名称时,使用*号,注意需要添加双引号哟,否则是char类型的,会报错,当然还可以以集合的形式进行忽略指定的多个服务ID,关于更多的使用情况,需要老弟去看看源码咯,博主就不再这儿再具体的分析源码咯。
此时访问,就只能通过自定义的代理名称来访问了,原代理名称则不能访问了,如下图:
配置公共前缀,一般这个前缀也很重要,比如有的公司使用的是公司名称的简称或者直接项目名称的简称等,这儿就以 “ /etcp ” 作为前缀为例,通过 “ zuul.prefix: ” 来指定,完整内容如下:
server:
port: 6001
spring:
application:
name: micsroservice-zuul
eureka:
client: #客户端注册进eureka服务列表内
service-url:
defaultZone: http://www.eureka7001.com:7001/eureka/,http://www.eureka7002.com:7002/eureka/,http://www.eureka7003.com:7003/eureka/
instance:
instance-id: microservice-zuul-6001
prefer-ip-address: true
zuul:
prefix: /etcp # 添加公共的前缀
ignored-services: microservice-provider # 忽略单个服务ID
routes:
microservice.serviceId: microservice-provider
microservice.path: /java98k/**
info:
app.name: learning-microservice-springcloud
company.name: huazai-studio
build.artifactId: $project.artifactId$
build.version: $project.version$
再次访问者需要加上指定的前缀咯,如下图:
GitLab 源码地址:
项目源码地址(zip格式的工程包):
好了,关于 Spring Cloud 进阶--Rest微服务加入zuul微服务网关的代理、路由、过滤及访问映射规则配置 就写到这儿了,如果还有什么疑问或遇到什么问题欢迎扫码提问,也可以给我留言哦,我会一一详细的解答的。
歇后语:“ 共同学习,共同进步 ”,也希望大家多多关注CSND的IT社区。
作 者: | 华 仔 |
联系作者: | [email protected] |
来 源: | CSDN (Chinese Software Developer Network) |
原 文: | https://blog.csdn.net/Hello_World_QWP/article/details/88087562 |
版权声明: | 本文为博主原创文章,请在转载时务必注明博文出处! |