有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Spring集成WebFlux。outboundGateway永远不会被调用

我有一个简单的流程:

return IntegrationFlows.from(ARTIFACTORY_INPUT_CHANNEL)
    .handle(WebFlux.outboundGateway(url)
            .expectedResponseType(new ParameterizedTypeReference<Mono<ArtifactorySearchResponse>>() {
            })
            .httpMethod(GET)
            .encodeUri(true))
    .transform(new ArtifactorySearchResponseTransformer())
    .channel(ARTIFACTORY_OUTPUT_CHANNEL)
    .get();

还有一个简单的测试:

outputChannel.subscribe(mockMessageHandler);
inputChannel.send(new GenericMessage<>("test"));

verify(mockMessageHandler).handleMessage(argThat(m -> {
    Object payload = m.getPayload();

    return payload instanceof String
            && payload.toString().equals("businesses.20171203.json.gz");
}));

这会一直失败,因为mockMessageHandler从未被调用。我看了看,看了看,看了看,但是测试WebFlux.outboundGateway的例子完全没有。Spring集成确实有很多例子,但这些几乎是无用的,因为它们

  1. 都是XML格式的(是的,2005年在打电话)
  2. 不要报道WebFlux

共 (1) 个答案

  1. # 1 楼答案

    一如既往,查看Spring源代码通常比等待帮助更有效率。事实证明,我遗漏了几件事:

    1. {}不应该是一个被动的发布者,而应该是我的DTO/domain对象,或者这些对象的某个集合
    2. HTTP调用失败,但错误没有出现,因为我没有注意错误通道,也没有为我的应用程序配置一个。我假设至少在测试期间,Spring会记录异常,但事实并非如此。我正在考虑创建一个票证,以便为测试启用一个简单的控制台日志错误处理程序
    3. 我还需要提供一个超时,以允许HTTP调用完成。这是使用Mockito VerificationAfterDelay完成的