我刚刚遇到一个令我困惑的问题 . 我很满意你能给出的每一个建议,即使它是关于如何获得更多的见解(即记录) .

我使用spring boot 2.0.0M1(由start.spring.io生成)和被动(netty支持) org.springframework.web.reactive.function.client.WebClient .

当调用刚刚返回JSON对象的旧的非响应服务时,即使被调用的服务完全响应(比较日志),WebClient也不会发出任何事件 .

2017-05-29 17:33:30,016 | reactor-http-nio-2 | INFO | | onSubscribe([Fuseable] FluxOnAssembly.OnAssemblySubscriber) | myLogClass:145 | 2017-05-29 17:33:30,016 | reactor-http-nio-2 | INFO | | request(unbounded) | myLogClass:145 | 2017-05-29 17:33:30,016 | reactor-http-nio-2 | DEBUG | | onSubscribe([Fuseable] FluxOnAssembly.OnAssemblySubscriber) | client:125 | 2017-05-29 17:33:30,016 | reactor-http-nio-2 | DEBUG | | request(unbounded) | client:125 |

在调试这个问题时,我发现一些奇怪的东西让我觉得我只是以错误的方式使用这个实现:我在nettys池/通道处理中看到了来自另一个服务(我之前调用过)的URL(将添加类我后来发现了它 .

其他观察:

  • 当我将其他WebClient呼叫退出图片时,有问题的呼叫有效

  • 被叫服务在网关后面,因此它们(可能)具有相同的IP但不同的URI

所以到目前为止我看似不太可能的想法:

  • netty Channels /游泳池处理以某种方式拧紧我的网址

  • WebClient不应与不同的URI一起使用

  • 在从netty回到订阅者的路上有一个带有URI / IP映射的f'up

正如我在开始时所说:我感谢每一个帮助,当然我会添加您要求的任何信息来重现这个bugger . 关于如何为此编写测试的任何指针也是受欢迎的!

从信息开始:这就是我如何使用WebClient作为最小样本(我知道 - 我不打算以阻塞方式使用它...)

return WebClient.create(serviceUri)
        .put()
        .uri("/mypath/" + id)
        .body(fromObject(request))
        .accept(APPLICATION_JSON)
        .header(HttpHeaders.CONTENT_TYPE, APPLICATION_JSON_VALUE)
        .header(HttpHeaders.COOKIE, createCookie())
        .retrieve()
        .bodyToMono(Response.class)
        .log("com.mypackage.myLogClass", Level.ALL)
        .block();