会写bug的要饭的 2021-04-26 16:03 采纳率: 50%
浏览 1500
已采纳

springcloud gateway一次请求被执行多次

配置文件中配置了路由ip,但我在拦截器中更改了请求url,

//获取域名后的path
                    String rawPath = req.getURI().getRawPath();
                    URI uri = UriComponentsBuilder.fromHttpUrl(enurl+"/test/getId").build().toUri();
                    //重新封装request对象
                    ServerHttpRequest request = req.mutate().uri(uri).build();
//                    Route oldroute = exchange.getAttribute(ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR);
//                    //从新设置Route地址
//                    Route route =
//                        Route.async().asyncPredicate(oldroute.getPredicate()).filters(oldroute.getFilters()).id(oldroute.getId())
//                            .order(oldroute.getOrder()).uri(uri).build();
                    URI mergedUrl = UriComponentsBuilder.fromUri(uri)
                            .scheme(uri.getScheme())
                            .host(uri.getHost())
                            .port("8080")
                            .build()
                            .toUri();
                    //NettyRoutingFilter 最终会从GATEWAY_REQUEST_URL_ATTR 取出uri对象进行http请求,所以这里需要将新的对象覆盖进去
                    exchange.getAttributes().put(ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR,mergedUrl);
                    return chain.filter(exchange.mutate().request(request).build()).then(Mono.fromRunnable(() -> {
                        //请求完成回调方法 可以再此完成计算请求耗时等操作
                    }));

这样就导致请求多次,但被请求接口并无反应;

当我把配置文件中路由更换成该接口的ip,就可以请求到接口

  • 写回答

6条回答 默认 最新

  • 会写bug的要饭的 2021-04-26 18:49
    关注

    添加exchange.getAttributes().put(ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR,route);

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 网络科学导论,网络控制
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)