0

テーブルから別のテーブルにデータを取得し、処理された行にマークを付け、結果を電子メールで送信するフローを設定しています。Aggregator を使用して ( JDBC クエリから複数の行を単一のトランザクションとして返すように Mule を取得するにはどうすればよいですか? を参照してください)、すべての行を 1 つの電子メールに結合しましたが、Aggregator を追加した後、SMTP エンドポイントが 2 番目に実行に失敗しました。反復...

  1. Mule Flow を開始します。
  2. フローを実行させる行を挿入します。
  3. SQL スクリプトと SMTP エンドポイントの実行。
  4. さらに行を挿入すると、フローが再度実行されます。
  5. SQL スクリプトのみが実行されます... SMTP エンドポイントはまったく実行されません。

    <flow name="Invoice_Workflow2Flow1" doc:name="Ross_invoice_Workflow2Flow1" processingStrategy="asynchronous">
        <jdbc:inbound-endpoint queryKey="GetUnprocessedInvoices" queryTimeout="10000" pollingFrequency="10000" connector-ref="Database" doc:name="Get invoice run">
            <jdbc:query key="GetUnprocessedInvoices" value="SELECT        INVOICE_NUMBER, ROWID FROM            FIN.LHF_INVOICE_WORKFLOW WHERE        (STATUS_FLAG = 'N')"/>
        </jdbc:inbound-endpoint>
        <jdbc:outbound-endpoint exchange-pattern="one-way" queryKey="insert_invoice_run" queryTimeout="10000" connector-ref="SPTSQL01_APPS_custom_app_data" doc:name="Load to custom_app_data">
            <jdbc:query key="insert_invoice_run" value="INSERT INTO lhf_ros_invoice_workflow ([INVOICE_NUMBER]  VALUES #[map-payload:INVOICE_NUMBER])"/>
        </jdbc:outbound-endpoint>
        <jdbc:outbound-endpoint exchange-pattern="one-way" queryKey="MarkAsProcessed" queryTimeout="10000" connector-ref="DatabaseMuleLogin" doc:name="Mark Processed in Ross">
            <jdbc:query key="MarkAsProcessed" value="UPDATE       FIN.LHF_INVOICE_WORKFLOW SET                STATUS_FLAG = 'P' WHERE        (ROWID = #[map-payload:ROWID])"/>
        </jdbc:outbound-endpoint>
        <message-properties-transformer doc:name="Message Properties">
            <add-message-property key="MULE_CORRELATION_GROUP_SIZE" value="1000"/>
            <add-message-property key="MULE_CORRELATION_ID" value="1"/>
        </message-properties-transformer>
        <collection-aggregator timeout="1000" failOnTimeout="false" doc:name="Collection Aggregator"/>
        <smtp:outbound-endpoint host="mail.example.com" to="test@example.com" from="muleservice@example.com" subject="[Invoice Workflow] Exceptions" responseTimeout="10000" doc:name="SMTP"/>
    </flow>
    

これが役に立つ場合のログは次のとおりです...

(最初の実行は問題なく動作し、SMTP エンドポイントが実行されます)

INFO 2012-12-06 09:08:52,143 [[ross_invoice_workflow].DatabaseMuleLogin.dispatcher.02] org.mule.transport.jdbc.sqlstrategy.SimpleUpdateSqlStatementStrategy: SQL ステートメントの実行: 1 行が更新されました INFO 2012-12-06 09:08:52,159 [[ross_invoice_workflow].DatabaseMuleLogin.dispatcher.03] org.mule.transport.jdbc.sqlstrategy.SimpleUpdateSqlStatementStrategy: SQL ステートメントの実行: 1 行更新情報 2012-12-06 09:08:52,180 [ [ross_invoice_workflow].DatabaseMuleLogin.dispatcher.01] org.mule.transport.jdbc.sqlstrategy.SimpleUpdateSqlStatementStrategy: SQL ステートメントの実行: 1 行更新情報 2012-12-06 09:08:52,223 [[ross_invoice_workflow].SPTSQL01_APPS_custom_app_data. dispatcher.01] org.mule.transport.jdbc.sqlstrategy.SimpleUpdateSqlStatementStrategy: SQL ステートメントの実行: 1 行更新情報 2012-12-06 09:08:52、223 [[ross_invoice_workflow].SPTSQL01_APPS_custom_app_data.dispatcher.03] org.mule.transport.jdbc.sqlstrategy.SimpleUpdateSqlStatementStrategy: SQL ステートメントを実行中: 1 行更新情報 2012-12-06 09:08:52,223 [[ross_invoice_workflow]。 SPTSQL01_APPS_custom_app_data.dispatcher.02] org.mule.transport.jdbc.sqlstrategy.SimpleUpdateSqlStatementStrategy: SQL ステートメントを実行しています: 1 行が更新されました INFO 2012-12-06 09:08:53,131 [[ross_invoice_workflow].connector.smtp.mule.default.dispatcher.01] org.mule.transport.service.DefaultTransportServiceDescriptor: デフォルトの送信トランスフォーマーを読み込んでいます: org.mule.transport.email .transformers.ObjectToMimeMessage INFO 2012-12-06 09:08:53,138 [[ross_invoice_workflow].connector.smtp.mule.default.dispatcher.01] org.mule.lifecycle.AbstractLifecycleManager: 初期化: 'connector.smtp.mule.default .dispatcher.1935379626'. オブジェクトは次のとおりです。 .dispatcher.1935379626'. オブジェクト: SmtpMessageDispatcher

(さらに行を挿入すると、SQL エンドポイントは実行されますが、SMTP は実行されません...)

INFO 2012-12-06 09:09:22,111 [[ross_invoice_workflow].DatabaseMuleLogin.dispatcher.03] org.mule.transport.jdbc.sqlstrategy.SimpleUpdateSqlStatementStrategy: SQL ステートメントの実行: 1 行が更新されました INFO 2012-12-06 09:09:22,129 [[ross_invoice_workflow].DatabaseMuleLogin.dispatcher.02] org.mule.transport.jdbc.sqlstrategy.SimpleUpdateSqlStatementStrategy: SQL ステートメントの実行: 1 行更新情報 2012-12-06 09:09:22,146 [ [ross_invoice_workflow].DatabaseMuleLogin.dispatcher.01] org.mule.transport.jdbc.sqlstrategy.SimpleUpdateSqlStatementStrategy: SQL ステートメントを実行中: 1 行更新情報 2012-12-06 09:09:22,168 [[ross_invoice_workflow].SPTSQL01_APPS_custom_app_data. dispatcher.03] org.mule.transport.jdbc.sqlstrategy.SimpleUpdateSqlStatementStrategy: SQL ステートメントの実行: 1 行更新情報 2012-12-06 09:09:22、168 [[ross_invoice_workflow].SPTSQL01_APPS_custom_app_data.dispatcher.01] org.mule.transport.jdbc.sqlstrategy.SimpleUpdateSqlStatementStrategy: SQL ステートメントを実行中: 1 行更新情報 2012-12-06 09:09:22,168 [[ross_invoice_workflow]。 SPTSQL01_APPS_custom_app_data.dispatcher.02] org.mule.transport.jdbc.sqlstrategy.SimpleUpdateSqlStatementStrategy: SQL ステートメントを実行しています: 1 行が更新されました

(さらに行を挿入、同じこと)

INFO 2012-12-06 09:09:22,111 [[ross_invoice_workflow].DatabaseMuleLogin.dispatcher.03] org.mule.transport.jdbc.sqlstrategy.SimpleUpdateSqlStatementStrategy: SQL ステートメントの実行: 1 行が更新されました INFO 2012-12-06 09:09:22,129 [[ross_invoice_workflow].DatabaseMuleLogin.dispatcher.02] org.mule.transport.jdbc.sqlstrategy.SimpleUpdateSqlStatementStrategy: SQL ステートメントの実行: 1 行更新情報 2012-12-06 09:09:22,146 [ [ross_invoice_workflow].DatabaseMuleLogin.dispatcher.01] org.mule.transport.jdbc.sqlstrategy.SimpleUpdateSqlStatementStrategy: SQL ステートメントを実行中: 1 行更新情報 2012-12-06 09:09:22,168 [[ross_invoice_workflow].SPTSQL01_APPS_custom_app_data. dispatcher.03] org.mule.transport.jdbc.sqlstrategy.SimpleUpdateSqlStatementStrategy: SQL ステートメントの実行: 1 行更新情報 2012-12-06 09:09:22、168 [[ross_invoice_workflow].SPTSQL01_APPS_custom_app_data.dispatcher.01] org.mule.transport.jdbc.sqlstrategy.SimpleUpdateSqlStatementStrategy: SQL ステートメントを実行中: 1 行更新情報 2012-12-06 09:09:22,168 [[ross_invoice_workflow]。 SPTSQL01_APPS_custom_app_data.dispatcher.02] org.mule.transport.jdbc.sqlstrategy.SimpleUpdateSqlStatementStrategy: SQL ステートメントを実行しています: 1 行が更新されました

4

1 に答える 1

1

問題は、MULE_CORRELATION_IDが に設定されていることにあり1ます。この関連付け ID を持つグループは処理済みであるため、グループの配信後にこの ID を使用し続けることはできません。私のストライプ ダウン テストでは、最初のグループが解放された後、同じ相関 ID を持つイベントをさらにフィードしようとすると、実際にはエラーが発生します。

選択したすべての行に対して同じ値を返すが、Mule がクエリを実行するたびに変化する列を選択クエリに追加することをお勧めします。たとえば、クエリは Mule によって生成された UUID を次のような式で受け取り、#[java.util.UUID.randomUUID().toString()]その値を列に返すことができます。次に、選択したレコードのグループで同じになるため、この値を相関 ID として使用できます。

追加された列が「CID」と呼ばれると仮定すると、構成は次のようになります。

<set-property propertyName="MULE_CORRELATION_GROUP_SIZE" value="3" />
<set-property propertyName="MULE_CORRELATION_ID" value="#[message.payload.CID]" />

(は よりも表現力のある config 要素であることに注意してくださいset-propertymessage-properties-transformer)

于 2012-12-07T19:29:04.700 に答える