【问题标题】:Spring Integragion + Message Gateway error handlingSpring集成+消息网关错误处理
【发布时间】:2020-04-05 09:43:16
【问题描述】:

我有一个由 REST 控制器调用的消息网关,我想知道处理下游流中可能发生的任何错误的正确方法是什么。

我所说的“处理任何错误”是指记录一些关于它们的信息,采取一些其他可能的操作,最后能够向控制器返回 400。

对我来说,更有意义的方法是在网关上有一个 errorChannel,但我认为 replyChannel 也可能有意义。

我已经能够使用“errorChannel”方法处理错误,不知道这是不是要走的路:

@MessagingGateway(errorChannel = "integrationFlowErrorChannel")
public interface OrderGateway {

    @Gateway(requestChannel = "orders.input")
    void processOrderRequest(Order order);

}

发送到 errorChannel 的任何错误都由以下服务激活器处理:

@ServiceActivator(inputChannel="integrationFlowErrorChannel")
public void handleExceptions(Message<MessageHandlingException> message) throws RuntimeException {
    log.error(String.format("error: %s", message));
    log.error(String.format("error: %s", message.getPayload()));

    throw new RuntimeException("something bad happened");
}

谢谢

【问题讨论】:

    标签: spring spring-integration


    【解决方案1】:

    你所拥有的是正确的。

    但我认为 replyChannel 也可能有意义。

    不清楚你的意思是什么;除非您想通过窃听记录回复或将回复发送到多个地方,否则通常不需要回复通道。

    【讨论】:

    • 还有一点注意:如果您有其他组件也可能发送到默认全局errorChannel,请不要使用errorChannel 名称:docs.spring.io/spring-integration/reference/html/…。只需在此网关中使用一些特定的通道来处理错误!
    • 我明白你的意思,原谅我的无知。最后一个问题:我可以使用日志通道适配器来记录异常吗?
    • Artem,Gary,你有没有想过写一本关于 SI 的书?我认为所有的书都有 4 年甚至更长的历史。
    猜你喜欢
    • 1970-01-01
    • 2018-08-25
    • 2021-06-09
    • 2013-03-30
    • 1970-01-01
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    • 2015-05-24
    相关资源
    最近更新 更多