当前位置: 首页 > 知识库问答 >
问题:

一旦http调用花费的时间超过Spring集成dsl所需的时间,如何发送错误消息?

仉高昂
2023-03-14

这里有三个子流,其中一个子流是HTTP出站调用。我希望HTTP调用应该尝试获得响应,直到提到的时间。如果超时,那么主流应该中断,并以Json格式显示错误消息作为输出。

下面是代码-

 @Bean
  public IntegrationFlow flow() {
    return flow ->
        flow.handle(validatorService, "validateRequest")
            .split()
            .channel(c -> c.executor(Executors.newCachedThreadPool()))
            .scatterGather(
                scatterer ->
                    scatterer
                        .applySequence(true)
                        .recipientFlow(flow1())
                        .recipientFlow(
                            f ->
                                f.gateway(
                                    flow2(), gateway -> gateway.replyTimeout(3000L)))
                        .recipientFlow(flow3()),
                gatherer ->
                    gatherer
                        .releaseLockBeforeSend(true)
                        .releaseStrategy(group -> group.size() == 2))
            .aggregate(someMethod1())
            .to(someMethod2());
  }

共有1个答案

万俟旭
2023-03-14

有关消息传递网关中的错误处理,请参阅留档:https://docs.spring.io/spring-integration/docs/current/reference/html/messaging-endpoints.html#gateway-no-response.

考虑在网关定义上添加一个errorChannel()以及replyTimeout(),以构建您想要的错误回复。但是,您也可以考虑为HTTP调用使用的RestTemplate添加请求超时之类的内容,以防止长时间等待HTTP响应。

 类似资料:
  • 我必须记录消费者在SpringKafka中花费的时间。由于kafkaListener方法对每条消息都执行,因此在那里放置一个记录器是行不通的。此外,有时一些信息会丢失,而不是被消费者消费掉。我应该把记录器放在哪里,以找出消费者启动后的弹性时间。使用者不会退出或关闭,其轮询将无限期进行

  • 问题内容: 我处在某种情况下,我需要找出在办公室进行一些内部申请所花费的总时间。 我有这样的示例数据: 这里的状态有不同的含义: 1开始2暂停3恢复4结束 表示员工在状态为1时在ScanDateTime开始工作。他们可以休息一下(状态2),然后返回并继续他们的工作(状态3),状态为4表示他们正在结束工作。注意:工作时间可能会有多个休息时间。 预期产量: 我试图按照一些示例来计算预期的结果集,但无济

  • 我试图做一个简单的poc与Spring启动与版本(2.3.7发布)的SpringKafka,以实现消费者批处理的工作原理,以及如何再平衡工作,如果消费者需要更多的流转时长,因为我是全新的这个消息系统。 现在我看到kafka重新平衡单个消费者(不允许并发)的问题。 这些是我设置的max.poll.interval属性。ms=50000和factory.getContanerProperties。se

  • 我正在调用while循环内的线程Hibernate1秒。当标志为true时,循环将运行(标志为true无限时间)。在循环内,线程应Hibernate1秒,唤醒并增加计数器,检查IF条件,如果为FALSE,则应再次Hibernate1秒并继续29次。在第30次迭代中,IF条件为true,IF语句中调用的方法将收集并存储数据。最后,在第32次迭代中,第二个IF语句将把存储的数据发送到服务器,并将计数设

  • 我正在使用Spring Boot编写一个web Rest web服务。

  • 问题内容: 我需要获取执行时间(以毫秒为单位)。 当时接受的答案是使用newDate()。getTime()。但是,我们现在都可以同意使用标准performance.now()API更合适。因此,我正在更改对此答案的公认答案。 问题答案: 使用 performance.now(): :需要导入类 使用 console.time: (非标准) (living standard) 注意 : 传递给和方