Spring Cloud 进阶--Rest微服务加入zuul微服务网关的代理、路由、过滤及访问映射规则配置

版权声明:本文为博主原创文章,如果觉得写的不错需要转载,在转载时请注明博文出处! https://blog.csdn.net/Hello_World_QWP/article/details/88087562

                          《 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);
	}
}
扫描二维码关注公众号,回复: 5552851 查看本文章

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
版权声明: 本文为博主原创文章,请在转载时务必注明博文出处!

猜你喜欢

转载自blog.csdn.net/Hello_World_QWP/article/details/88087562