4、springcloud基本构建(Zuul)-网关Zuul

项目工程目录如下

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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>

    <groupId>com.cloud</groupId>
    <artifactId>springcloudzuul</artifactId>
    <version>1.0-SNAPSHOT</version>


    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.17.RELEASE</version>
    </parent>
    <dependencies>
        <!-- 网关 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zuul</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>
        <!-- eureka -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>
    </dependencies>


</project>

启动类EurekaZuulApplication(相比注册服务增加了一个注解@EnableZuulProxy)

package com.cloud.zuul;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;

@SpringBootApplication
@EnableDiscoveryClient
@EnableZuulProxy
public class EurekaZuulApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaZuulApplication.class, args);
    }

}

application.properties:涉及请求从网关如何分发到各自注册中心服务的配置,有四种配置如下,我使用的是第四种,这样有新增服务时不需要修改zuul服务的配置

server.port=8089

spring.application.name=zuul
## 注册服务中心的配置地址
eureka.client.service-url.defaultZone=http://localhost:8090/eureka

###############################  网关全局变量配置所有配置方式start ##########################
############# 1.URL路径匹配  ##############
## URL pattern-使用路径方式匹配路由规则。
## 参数key结构: zuul.routes.customName.path=xxx-用于配置路径匹配规则。
## 其中customName自定义。通常使用要调用的服务名称,方便后期管理
## 可使用的通配符有: * ** ? || 1、? 单个字符;2、* 任意多个字符,不包含多级路径;3、** 任意多个字符,包含多级路径
#zuul.routes.eureka-application-service.path=/eurekaApplicationService/**
## 参数key结构: zuul.routes.customName.url=xxx || url用于配置符合path的请求路径路由到的服务地址。
#zuul.routes.eureka-application-service.url=http://127.0.0.1:8080/
############# URL路径匹配  ##############

############# 2.服务名称匹配  ##############
## service id pattern 通过服务名称路由
## key结构 : zuul.routes.customName.path=xxx
#zuul.routes.eureka-application-service.path=/api/**
## serviceId用于配置符合path的请求路径路由到的服务名称。
#zuul.routes.eureka-application-service.serviceId=eureka-application-service

#上述配置可简化如下
## 如果只配置path,不配置serviceId。则customName相当于服务名称。
## 符合path的请求路径直接路由到customName对应的服务上。
#zuul.routes.eureka-application-service.path=/api/**
############# 2.URL路径匹配  ##############


############# 3.路由排除配置  ##############
## 配置不被zuul管理的服务列表。多个服务名称使用逗号','分隔。配置的服务将不被zuul代理。
#zuul.ignored-services=eureka-application-service
## 此方式相当于给所有新发现的服务默认排除zuul网关访问方式,只有配置了路由网关的服务才可以通过zuul网关访问
## 通配方式配置排除列表。
#zuul.ignored-services=*
## 使用服务名称匹配规则配置路由列表,相当于只对已配置的服务提供网关代理。
#zuul.routes.eureka-application-service.path=/api/**
## 通配方式配置排除网关代理路径。所有符合ignored-patterns的请求路径都不被zuul网关代理。
#zuul.ignored-patterns=/**/test/**
#zuul.routes.eureka-application-service.path=/api/**
############# 3.路由排除配置  ##############

############# 4.路由前缀配置  ##############
# 前缀路由匹配,配置请求路径前缀,所有基于此前缀的请求都由zuul网关提供代理。
zuul.prefix=/api
# 使用服务名称匹配方式配置请求路径规则。
# 这里的配置将为:http://ip:port/api/appservice/**的请求提供zuul网关代理,可以将要访问服务进行前缀分类。
# 并将请求路由到服务eureka-application-service中。(不配置path,默认指向服务ID)
# zuul.routes.eureka-server-client.path=/clientService/**
# zuul.routes.order-service.path=/orderService/**
############# 4.路由前缀配置  ##############
###############################  网关全局变量配置所有配置方式end ##########################

访问注册中心,可以查看到zuul服务已在注册中心注册

使用postman走zuul网关访问client-service服务的接口

 当你查看到这里的时候,不知道你有没有这个思考。目前构建的cloud微服务,我似乎不走网关,我也可以直接访问client-service服务。这样是不是跟微服务所有请求走zuul网关不一样了。接下来的篇节就会针对这种现象说明具体情况和解决方案。


版权声明:本文为Sorry_No_konw原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。