我正在尝试理解 mule 错误对象,但我对调试器中看到的内容有点困惑。
假设我的应用程序中存在 http 请求调用失败,并且在调试器中我可以看到带有 muleMessage 属性的错误对象。
如果我右键单击错误对象>复制值,那么我在那里看不到 muleMessage 。在那里它被称为 errorMessage。两者具有相同的值。
对于 IBM MQ 侦听器也类似。当我在调试器中查看属性时,我可以看到attributes.headers.messageId。然而,当我使用 munit 记录在 munits 中捕获它时,在 JSON 中的 attribute.headers.JMSMessageID 中捕获相同的值。
我应该使用哪些?
对于错误,您应该只使用记录的表达式:https://docs.mulesoft.com/mule-runtime/latest/mule-error-concept#selector_expressions
在该文档中记录了
#[error.errorMessage]
,但另一个没有记录。仅仅因为您在调试器中看到某些属性并不意味着您应该使用它们。有些是 Mule 内部使用的,但不能保证它们将来可以访问。由于 Mule 版本中的内部更改,使用这些未记录值的应用程序在无法访问时会失败。
除了@Aled 描述的内容之外。
处理 Mule 错误和属性时,区分遇到这些属性的不同上下文非常重要
错误对象用于捕获有关流程执行期间发生的错误的信息。记录使用的关键属性是 error.errorMessage 和 error.description。这些属性是公共 API 的一部分,并保证在 Mule 版本中保持稳定。
error.errorMessage 提供了清晰、简洁的错误描述,而 error.description 提供了其他详细信息(如果有)。需要注意的是,虽然调试器可能会显示其他属性,例如 muleMessage,但这些属性没有正式记录,因此不应依赖这些属性。这些内部属性可能会在未来的 Mule 版本中发生更改,恕不另行通知,如果您的应用程序依赖它们,则可能会导致应用程序失败。
对于 JMS 相关属性,JMSMessageID 是根据 JMS 规范的标准化名称,并且可能是您的实现中更可靠的选择。
相关官方文档- https://docs.mulesoft.com/mule-runtime/latest/mule-error-concept#selector_expressions