首页 > 解决方案 > 带有 @Restcontoller 计时问题的 Spring 集成流程

问题描述

一个简单的@RestController 通过@MessagingGateway 连接到一个IntegrationFlow。在负载测试之后,我们在跟踪中看到我们甚至在流中开始处理之前就损失了“很多时间”: 跟踪结果 在这个示例中,我们可以看到在将消息发送到流之前花费了超过 90 毫秒。有没有人知道是什么导致了这种行为?据我了解文档,一切都在发送者线程中处理,因此没有创建特殊的工作线程。我们使用 Restcontroller 因为我们需要使用 springdoc-openapi-ui 创建文档

示例代码:

休息控制器

@RestController
public class DescriptionEndpoint {

   HttpMessageGateway httpMessageGateway;
   public Result findData(@Valid dataRequest dataRequest) {
      final Map<String, Object> headerParams = new HashMap<>();
      return httpMessageGateway.basicDataDescriptionFlow(dataRequest, headerParams);
   }
}

网关

@MessagingGateway
public interface HttpMessageGateway {

   @Gateway(requestChannel = "startDataFlow.input")
   Result basicDataDescriptionFlow(@Payload dataRequest prDataRequest, @Headers Map<String, Object> map);

}

集成流

public class ExampleFlow {
   
   @Bean
   public IntegrationFlow startDataFlow() {
      return new FlowExtension()
          .handle(someHandler1)
          .handle(someHandler2)
          .handle(someHandler3)
          .get();
   }
}

标签: spring-bootspring-integration

解决方案


添加更多跟踪后,我意识到这个时间问题是由我的 spring 安全配置引起的。不幸的是,我想,跨度只代表 findData(..) 开始后的时间。但似乎,跟踪已经在代理方法和安全链中开始了。

在改进了我们的 JWTToken 过滤器的一些实现之后,这些端点的花费时间是可以的。


推荐阅读