0

我已经建立了一个简单的 Spring Integration 流程,它由以下步骤组成:

  1. 然后定期轮询休息 api
  2. 对有效载荷进行一些处理
  3. 并将其放在 Kafka 主题上。

请注意以下代码:

@Component
public class MyIntegrationFlow extends IntegrationFlowAdapter {
    @Override
    protected IntegrationFlowDefinition<?> buildFlow() {
        return from(() -> List.of("pathVariable1", "pathVariable2"), c -> c.poller(Pollers.fixedDelay(5, TimeUnit.SECONDS)))
                .split()
                .handle(httpRequest(), c -> c.advice(new RequestHandlerRetryAdvice()))
                .transform(Tranformers.fromJson(Foo.class))
                .filter(payload -> payload.isValid())
                .log()
                .transform(Tranformers.toJson())
                .channel(Source.OUTPUT); // output channel for kafka topic
    }

    private HttpMessageHandlerSpec httpRequest() {
        return Http.outboundGateway("http://somehost:8080/{pathVariable}")
                .httpMethod(GET)
                .uriVariable("pathVariable", Message::getPayload)
                .expectedResponseType(String.class);
    }
}

这非常有效,但是,我正在努力提出一些好的测试。

  • 我应该如何模拟外部 REST API?
  • 我应该如何测试重试策略是否启动以及是否发出了所需数量的 http 请求?
  • 如何更改MessageSource定期轮询的流(路径变量列表)?
  • 如何检查有效负载是否已成功进入 Kafka 主题?
4

1 回答 1

0

太多的问题,其中一些需要太宽泛的解释。无论如何,我认为您可以从 Spring Integration Testing Framework 及其文档开始。

  1. 我应该如何模拟外部 REST API?

我认为您可以考虑使用 Spring Framework 中的 Mock MVC 并将其MockMvcClientHttpRequestFactory注入HttpRequestExecutingMessageHandler基于HttpMessageHandlerSpec.

  1. 重试政策确实踢了

好吧,我猜想同一个模拟 MVC 端点可以验证它被调用了多少次,并且前几次失败以启动重试。

  1. 如何更改消息源

这正是 Spring 集成测试框架的一部分,其MockIntegration.mockMessageSource()MockIntegrationContexthttps ://docs.spring.io/spring-integration/docs/5.1.6.RELEASE/reference/html/#mockintegration

  1. 进入卡夫卡主题了吗?

或者您提到MockIntegration.mockMessageHandler() 要验证调用 Kafka 的端点。或者使用Embedded KafkaSpring Kafka 项目中的一个:https ://docs.spring.io/spring-kafka/docs/2.2.7.RELEASE/reference/html/#embedded-kafka-annotation

于 2019-07-01T17:08:36.143 回答