【问题标题】:Mule private flows and separation of concernsMule 私有流和关注点分离
【发布时间】:2015-01-17 05:39:52
【问题描述】:

我有一个想用 Mule 解决的需求。我的流程设计如下:

  • 具有请求-响应 HTTP 入站端点的 主流程。在对当前有效负载应用几个转换之后,该主流程调用两个私有流,即 private-flow1private-flow2,它们是处理策略是同步的骡子私有流。
  • private-flow1 使用请求-响应 HTTP 出站端点调用外部服务。
  • private-flow2 使用数据库连接器将来自外部服务的响应放在数据库上。

如果每个私有流中都有任何异常,我想使用 Catch Exception Strategy 在相应的私有流中处理它们。

我有这样的设计来分离关注点,以便每个流程执行一个单一的职责。

假设在任何一个私有流中存在 IOException、SQLException 或任何异常,如何重新抛出我的自定义异常,例如 org.mycompany.CustomException,包括根本原因。所以 ma​​in-flow 将只需要处理 org.mycompany.CustomException 并构建相关的异常响应。

例如,如果 private-flow1 抛出由 IOException 引起的 org.mycompany.CustomException,则实际的异常响应将是:

{“exceptionMessage”:外部服务不可用,“exceptionCode”:101}

并且,如果 private-flow2 抛出由 SQLException 引起的 org.mycompany.CustomException,则实际的异常响应将是

{“exceptionMessage”:数据库不可用,“exceptionCode”:102}

【问题讨论】:

    标签: exception-handling mule


    【解决方案1】:

    每个私有流程都有自己的异常策略,您可以使用流程中的 Groovy 组件抛出异常..

    这里是一个链接如何做到这一点:- How do I force an exception in mule

    为自定义异常创建将扩展 DefaultMessagingExceptionStrategy 的 java 类

    更新:- 使用 custom-exception-strategy 的示例:- Why is Mule exception strategy so chatty?

    【讨论】:

    • Groovy 脚本组件是重新抛出异常的唯一可用选项吗?
    • 如果您计划自定义异常,您可以使用 java 类或 Groovy 重新抛出自定义异常
    • 您能否提供一个示例或链接以使用扩展 DefaultMessagingExceptionStrategy 的 java-class 创建自定义异常?以及如何在流中使用这个 java 类。
    • 我不确定扩展 CatchMessagingExceptionStrategy 是否会重新抛出自定义异常?
    • 正如你所建议的,我确实喜欢这样:<catch-exception-strategy doc:name="Catch Exception Strategy"><scripting:component doc:name="throw-custom-exception"><scripting:script engine="Groovy"><![CDATA[throw new org.mycompany.mule.CustomException()]]></scripting:script></scripting:component> </catch-exception-strategy>。但它引发了一个新错误:org.mule.exception.CatchMessagingExceptionStrategy: Failed to dispatch message to error queue after it failed to process.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    • 2014-02-09
    • 2013-03-28
    • 2015-10-22
    • 2011-01-06
    • 1970-01-01
    相关资源
    最近更新 更多