Spring WebClient未发出响应

Spring WebClient未发出响应,spring,spring-boot,netty,spring-webflux,Spring,Spring Boot,Netty,Spring Webflux,我最近遇到了一个让我感到困惑的问题。我很高兴你能给我的每一个建议,即使是关于如何获得更多的见解(如日志记录) 我正在使用SpringBoot2.0.0M1(由start.spring.io生成)和reactive(netty-backed)org.springframework.web.reactive.function.client.WebClient 当调用一个只返回JSON对象的旧的非反应性服务时,WebClient不会发出任何事件,即使被调用的服务是完全响应的(比较日志) 2017-0

我最近遇到了一个让我感到困惑的问题。我很高兴你能给我的每一个建议,即使是关于如何获得更多的见解(如日志记录)

我正在使用SpringBoot2.0.0M1(由start.spring.io生成)和reactive(netty-backed)
org.springframework.web.reactive.function.client.WebClient

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


2017-05-29 17:33:30016 | reactor-http-nio-2 | INFO | | | onSubscribe([fusable]FluxOnAssembly.OnAssemblySubscriber)| myLogClass:145 |
2017-05-29 17:33:30016 | reactor-http-nio-2 | INFO | request(无界)| myLogClass:145 |
2017-05-29 17:33:30016 | reactor-http-nio-2 | DEBUG | | onSubscribe([fusable]FluxOnAssembly.OnAssemblySubscriber)|客户:125 |
2017-05-29 17:33:30016 | reactor-http-nio-2 | DEBUG | request(无界)|客户端:125|

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

其他意见:

  • 当我将另一个WebClient调用排除在画面之外时,有问题的调用会起作用
  • 被调用的服务位于网关后面,因此它们(可能)具有相同的IP但不同的URI
到目前为止,我似乎不太可能的想法是:

  • netty的通道/池处理不知怎么搞砸了我的URL
  • WebClient不应与不同的URI一起使用
  • 在从netty返回订阅者的路上,有一个带有URI/IP映射的f'up
正如我在开始时所说:我非常感谢您的帮助,当然我会添加您要求的任何信息来复制这个bug。 任何关于如何为此编写测试的指针都是受欢迎的

从信息开始:这是我如何使用WebClient作为最低限度的示例(我知道-我不打算以阻塞方式使用它..)


您已经描述了您认为正在发生的事情,但我们甚至无法重现这个问题,除非:有您正在使用的代码(您提到了两个WebClient实例,我只看到一个),您如何触发用例,您期望什么,您将得到什么,等等。嗨,Brian,感谢您的回答,尽管我的问题不完整。我会尽快添加更多信息。您好,我也是被动程序新手,但您在执行请求时不应该调用.exchange()?在这种情况下,retrieve()应该是一种快捷方式,并且可以工作:-)可能重复您描述了您认为正在发生的事情,但我们甚至无法尝试重现该问题,没有:有你正在使用的代码(你提到了两个WebClient实例,我只看到一个),你如何触发用例,你期望什么,你得到什么,等等。嗨,Brian,谢谢你的回答,尽管我的问题不完整。我会尽快添加更多信息。您好,我也是被动程序的新手,但您不应该在执行请求时调用.exchange()?在这种情况下,retrieve()应该是一个快捷方式,并且工作:-)可能重复
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();