项目工程目录如下
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版权协议,转载请附上原文出处链接和本声明。