拆分 IntegrationFlow 进行测试

Split up an IntegrationFlow for testing

我打算测试 IntegrationFlow 有问题吗?

让我向您介绍一下我打算做什么。

IntegrationFlows
        .from(Amqp.inboundAdapter(connectionFactory, queue)
            .acknowledgeMode(AcknowledgeMode.AUTO)
            .concurrentConsumers(10).prefetchCount(100))
        .<byte[], String>transform(String::new)     
        .transform(objectMapperProcessor::process) 
        .enrichHeaders(header)                           
        .handle(Amqp.outboundAdapter(amqpTemplate)                                
            .routingKeyExpression("headers.routingKey_delta"))
        .get();

这是一个样本IntegrationFlow我想测试一下。现在,我想通过在每个 transformenrichHeaders 处潜水来测试它。从 Spring Integration 文档中,这样做的方法是拆分流并将消息写入通道,并在后续流中从通道读取。

我的问题是,当我将其拆分为 QueueChannelDirectChannel 时,我是否更改了默认性能?因为现在有一个数据被发送到的额外层,如果我在将数据传递到不同的流时使用错误类型的通道,是否会减慢速度?

嗯,实际上没有任何性能影响。无论如何,通道默认情况下位于端点之间。他们甚至可以访问它们,您已经可以访问它们并进行交互。您甚至可能不需要任何额外的通道和这种流量划分。

另一方面,IntegrationFlow 只是一个逻辑容器,当您出于某种逻辑原因将其中一个划分为多个时,不会再对性能产生任何影响。只是因为目标努力是由端点完成的,而不是流量。

您可能会发现此信息很有用:https://docs.spring.io/spring-integration/docs/5.0.2.RELEASE/reference/html/java-dsl.html#java-dsl-channels

还要注意Spring中的测试框架集成:https://docs.spring.io/spring-integration/docs/5.0.2.RELEASE/reference/html/testing.html#test-context