コレクションアグリゲーターを使用してそれらを集約する前に、jdbc クエリからのメッセージをソートしたいと思います。これを行う最良の方法はリシーケンサーだと思います。この行を追加すると
<resequencer timeout="6000" failOnTimeout="false" />
ワークフローで次のエラーが発生します。
** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ****メッセージ : 式 "message.payload.INVOICE_NUMBER" の実行に失敗しました。(org.mule.api.expression.ExpressionRuntimeException)。メッセージ ペイロードのタイプ: MuleEvent[] コード: MULE_ERROR--2 ----------------------------------- --------------------------------------------- 例外スタック: 1 [Lorg.mule.api.MuleEvent; java.util.Map にキャストできません (java.lang.ClassCastException)
org.mvel2.optimizers.impl.refl.nodes.MapAccessor:42 (null) 2. [エラー: getter を呼び出せません: getPayload [declr.class: org.mule.el.context.MessageContext; act.class: org.mule.el.context.MessageContext] (トレースを参照)] [近く: {... 不明 ....}] ^ [行: 1、列: 0] (org.mvel2.CompileException) org.mvel2.optimizers.impl.refl.nodes.GetterAccessor:75 (null) 3. 式「message.payload.INVOICE_NUMBER」の実行に失敗しました。(org.mule.api.expression.ExpressionRuntimeException)
org.mule.el.mvel.MVELExpressionLanguage:211 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/expression/ExpressionRuntimeException.html) 4. 式「メッセージの実行」 .payload.INVOICE_NUMBER" が失敗しました。(org.mule.api.expression.ExpressionRuntimeException)。メッセージ ペイロードのタイプ: MuleEvent[] (org.mule.api.transformer.TransformerMessagingException)
org.mule.transformer.AbstractTransformer:123 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/transformer/TransformerMessagingException.html) ---------- -------------------------------------------------- -------------------- ルート例外スタック トレース: java.lang.ClassCastException: [Lorg.mule.api.MuleEvent; org.mvel2.optimizers.impl.refl.nodes.MapAccessor.getValue(MapAccessor.java:42) で java.util.Map にキャストできません org.mvel2.optimizers.impl.refl.nodes.GetterAccessor.getValue(GetterAccessor) .java:41) org.mvel2.optimizers.impl.refl.nodes.VariableAccessor.getValue(VariableAccessor.java:38) で + 3 つ以上 (デバッグ レベルのログ記録または '-Dmule.verbose.exceptions=true' をすべてに設定)
<when expression="#[message.payload.LHF_INVOICE_METHOD == 'EDI']"><processor-chain>
<message-properties-transformer doc:name="Set Correlation ID">
<add-message-property key="MULE_CORRELATION_SEQUENCE" value="#[message.payload.INVOICE_NUMBER]" />
</message-properties-transformer>
<resequencer timeout="6000" failOnTimeout="false" />
<set-payload value="#[message.payload.INVOICE_NUMBER]" doc:name="EDI"/>
<collection-aggregator timeout="3200" failOnTimeout="false" doc:name="EDI" storePrefix="EDI" />
<smtp:outbound-endpoint host="mail.example.com" to="test@example.com" from="muleservice@example.com" subject="[Invoice Workflow] EDI" responseTimeout="10000" doc:name="EDI"/>
<collection-splitter doc:name="Collection Splitter"/>
<jdbc:outbound-endpoint exchange-pattern="one-way" queryKey="gMarkProcessedInRoss" queryTimeout="1000" connector-ref="DatabaseMuleLogin" doc:name="Mark Processed in Ross">
</jdbc:outbound-endpoint>
</processor-chain>
</when>
リシーケンサー (以下) の後にスプリッターを追加しましたが、メッセージはまだ電子メールでソートされていないことを除いて機能します。
<set-property propertyName="MULE_CORRELATION_SEQUENCE" value="#[message.payload.INVOICE_NUMBER]" />
<resequencer timeout="6000" failOnTimeout="false" />
<collection-splitter doc:name="Collection Splitter"/>
<set-payload value="#[message.payload.message.payload.INVOICE_NUMBER]" doc:name="EDI"/>
<echo-component doc:name="Echo"/>
<collection-aggregator timeout="3200" failOnTimeout="false" doc:name="EDI" storePrefix="EDI" />
<smtp:outbound-endpoint host="mail.example.com" to="test@example.com" from="muleservice@example.com" subject="[Invoice Workflow] EDI" responseTimeout="10000" doc:name="EDI"/>
<collection-splitter doc:name="Collection Splitter"/>
<jdbc:outbound-endpoint exchange-pattern="one-way" queryKey="RouteEDI" queryTimeout="1000" connector-ref="DatabaseMuleLogin" doc:name="Mark Processed in Ross">
</jdbc:outbound-endpoint>
エコー コンポーネントを追加したところ、その時点で並べ替えられているので、アグリゲーターが並べ替えを解除していると確信しています。