zuul控制网关配置的那些坑

问题还原

在启动服务的时候,注册中心配置的三个服务(用户服务、商品服务、个公共基础服务)都能进行一个正常的启动,但是无法通过swagger进行一个访问,于是前台页面无法进行一个访问。

起初的排错思路是,新增了一个商品显示属性,于是寻找一通,还是没有找到…

最后发现,通过postman来对商品的服务的数据进行一个测试,这此时居然能获取商品的信息。于是分析了一下,服务能够正常启动,说明服务模块内没有出现问题,而Swagger需要通过网关中心进行数据的访问,但postman则不需要通过网关进行一个数据的访问。因为在postman中是直接数据的父服务器的路径地址,比如:http://localhost:8002/productType/treeData 因为服务没有出现问题,数据当然能够进行数据的访问。问题肯定是出现在网关上面。于是去排查网关的配置信息,

  • 文档信息配置:
package cn.lzj.aigou.config;

import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;
import springfox.documentation.swagger.web.SwaggerResource;
import springfox.documentation.swagger.web.SwaggerResourcesProvider;

import java.util.ArrayList;
import java.util.List;

@Component
@Primary
public class DocumentationConfig implements SwaggerResourcesProvider {
    @Override
    public List<SwaggerResource> get() {
        List resources = new ArrayList<>();
        //aigou网关前缀,employee网关路径   ;swagger的路径 ,以后增加了接口就在这配置就ok
        resources.add(swaggerResource("用户系统", "/aigou/user/v2/api-docs", "2.0"));
        resources.add(swaggerResource("商品系统", "/aigou/product/v2/api-docs", "2.0"));
        resources.add(swaggerResource("基础系统", "/aigou/common/v2/api-docs", "2.0"));
        return resources;
    }

    private SwaggerResource swaggerResource(String name, String location, String version) {
        SwaggerResource swaggerResource = new SwaggerResource();
        swaggerResource.setName(name);
        swaggerResource.setLocation(location);
        swaggerResource.setSwaggerVersion(version);
        return swaggerResource;
    }
}
  • application.yml配置
server:
  port: 9527
spring:
  application:
    name: AIGOU-ZUUL-GATEWAY
eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka
  instance:
      instance-id: gateway-9527.com
      prefer-ip-address: true
# 一定要注意层级的缩进
zuul:
  host:
    connect-timeout-millis: 15000 #HTTP连接超时大于Hystrix的超时时间------自己新增的------》
    socket-timeout-millis: 60000   #socket超时
  routes:
    aigouUser.serviceId: user-provider
    aigouUser.path: /user/**
    aigouProduct.serviceId: aigou-product
    aigouProduct.path: /product/**
    aigouCommon.serviceId: common-provider
    aigouCommon.path: /common/**
  ignored-services: "*"
  prefix: / aigou
#ribbon:        #设置ribbon的超时时间小于zuul的超时时间
#  ReadTimeout: 60000
#  ConnectTimeout: 60000
#  MaxAutoRetries:0
#  MaxAutoRetriesNextServer:1
hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 10000
ribbon:
  ReadTimeout: 15000
  ConnectTimeout: 60000
  MaxAutoRetries: 0
  MaxAutoRetriesNextServer: 1

最后发现,在路径上面多了一个空格
在这里插入图片描述

将空格删掉,swagger便可以进行正常的访问

总结

还是对整个思路没有理解透彻,不清楚网关配置的流程和原理,以及对postman和swagger的原理不清晰,无法立马反应出是网关配置上面出现的问题,在排错上面思路不清晰。

以后不要只是单纯的拷贝代码,需要进行一个结构原理的分析,对哪个模块的处理流程清楚,不要只知道应该这样用,还要知道为什么应该这样用,如果不这样用回出现什么情况,这样用来之后会出现什么情况。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值