mule - 如何在 Mule 4 中通过 ActiveMQ 传递属性
问题描述
我们正在从 Mule 3 迁移到 Mule 4,在我们的一个功能中,我们需要将消息发布到一个主题,而下游的另一个 mule 组件正在从桥接到该主题的队列中消费。
这里没有什么特别的。
为了确保我们能够通过日志跟踪流程,我们在向主题发布消息时发送了“TrackingId”属性(Mule 3)
message.setOutboundProperty("XYZ_TrackingID", flowVars['idFromUI']);
return payload;
但是,当我在 Mule 4 中尝试相同的操作时,我们得到以下异常:
ERROR 2020-12-20 10:09:12,214 [[MuleRuntime].cpuIntensive.14: [mycomponent].my_Flow.CPU_INTENSIVE
@66024695] org.mule.runtime.core.internal.exception.OnErrorPropagateHandler:
Message : groovy.lang.MissingMethodException: No signature of method:
org.mule.runtime.api.el.BindingContextUtils$MessageWrapper.setOutboundProperty() is applicable for
argument types: (java.lang.String, org.mule.weave.v2.el.ByteArrayBasedCursorStream) values:
[XYZ_TrackingID, "1234567"].\nError type : (set debug level logging or '-
Dmule.verbose.exceptions=true' for
everything)\n********************************************************************************
检查互联网,似乎在 Mule4 中设置出站属性已按此处删除
那么我如何在 Mule 4 中实现同样的效果呢?
解决方案
出于多种原因,甚至不要尝试这样做。因为一个消息结构不同,所以输出属性不再存在,该方法甚至不存在。另一方面,在 Mule 4 中,像 Groovy 组件这样的组件只能返回一个值,而不能更改事件。他们无法决定要分配什么值。您可以在配置中设置目标(有效负载或变量)而不更改属性。请注意,Mule 4 中的变量由 引用var.
,而不是flowVars.
Mule 3 中的类似变量(即vars.idFromUI
)。
有一种更简单的方法可以在 Mule 4 JMS 连接器中设置消息属性。使用属性元素并将其传递给具有属性的对象。
例如,它可能是这样的:
<jms:publish config-ref="JMS_config" destination="${bridgeDestination}" destinationType="TOPIC">
<jms:message>
<jms:body>#["bridged_" ++ payload]</jms:body>
<jms:properties>#[{
XYZ_TrackingID: vars.idFromUI
}]</jms:properties>
</jms:message>
</jms:publish>
它在文档中:https ://docs.mulesoft.com/jms-connector/1.0/jms-publish#setting-user-properties 。我从那里改编了我的例子。
推荐阅读
- python - 在熊猫中计算具有固定开始日期的滚动中位数
- php - Laravel Eloquent:3 表关系
- wordpress - 是否有任何过程可以减少 wrdpress 网站的“延迟未使用的 CSS”计数
- time - ISO 8601 重复间隔:每月最后一天
- c++ - OpenCL 的高 CPU 使用率和潜在的 CPU 使用率
- sql - 在我的表上使用哪个 sql 索引以获得最佳查询性能
- azure - 将不同语句中的列合并到一个变量中
- javascript - document.onmousemove 仅由我的 js 类的最后创建的对象处理
- r - R中的数据框转换
- python-3.x - 如何将二维数据转换为具有单值时间的三维三维数据?