我有一个与JMS消息和Java组件一起使用的mule流来处理批处理。完成工作后,我需要发送电子邮件通知用户此过程的结果。我目前正在Java组件中处理所有这些,处理和电子邮件发送。我想解耦电子邮件发送操作,以便在其他流程中重用此组件,而不是将代码从Java组件复制/粘贴/调整到其他组件。我的问题是我想要发送到此组件的有效负载是Map<String, Object>
,而流接收Serializable
参数(在这种情况下,是一个扩展Serializable
的自定义类)。如何在从Java组件发送之前更改有效负载,在调用电子邮件组件之前我知道要在此Map<String, Object>
中设置的参数?
目前这就是我所拥有的:
<flow name="SomeBatchProcessFlow">
<jms:inbound-endpoint queue="${some.batch.process}"
connector-ref="JmsConnectorRef" />
<component>
<method-entry-point-resolver>
<include-entry-point method="foo" />
</method-entry-point-resolver>
<spring-object bean="someBatchProcessComponent" />
</component>
<!--
what to put here to change the payload for the Map<String, Object> I've prepared
in SomeBatchProcessComponent#foo method?
-->
<jms:outbound-endpoint address="jms://${queues.emailSend}"
connector-ref="JmsConnectorRef" />
</flow>
<flow name="EmailSendFlow">
<jms:inbound-endpoint queue="${queues.emailSend}"
connector-ref="JmsConnectorRef" />
<component>
<method-entry-point-resolver>
<include-entry-point method="sendEmail" />
</method-entry-point-resolver>
<spring-object bean="emailSenderComponent" />
</component>
</flow>
我知道我可以从SomeBatchProcessComponent#foo
手动发送JMS消息,但我更希望mule能够处理这项工作以保持解耦。
答案 0 :(得分:1)
在骡子流使用中设置有效负载
<set-payload value="#[newPayload]"/>
其中newPayload
是局部变量。
要更改Java组件中的有效内容,请返回Map<String, Object>
对象,该对象将被推送到JMS
。
您也可以查看vm queues
,而不是使用JMS进行电子邮件,