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