【问题标题】:Mule smtp endpoint following aggregator fails after first run首次运行后,聚合器之后的 Mule smtp 端点失败
【发布时间】:2012-12-08 03:29:04
【问题描述】:

我正在设置一个流程来将数据从一个表中提取到另一个表中,标记已处理的行,然后通过电子邮件发送结果。我使用了聚合器(请参阅: How do I get a Mule to return multiple rows from a JDBC query as a single transaction?) 将所有行合并到一封电子邮件中,但在添加聚合器后,SMTP 端点无法在第二次迭代中运行...

  1. 开始骡流。
  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 行 INFO 2012-12-06 09:08:52,180 [[ross_invoice_workflow].DatabaseMuleLogin.dispatcher.01] org.mule.transport.jdbc.sqlstrategy.SimpleUpdateSqlStatementStrategy:执行 SQL 语句:更新了 1 行 INFO 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 行 INFO 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 行 INFO 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 信息 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 '。对象是:SmtpMessageDispatcher 信息 2012-12-06 09:08:53,174 [[ross_invoice_workflow].connector.smtp.mule.default.dispatcher.01] org.mule.lifecycle.AbstractLifecycleManager:开始:'connector.smtp.mule.default.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 行 INFO 2012-12-06 09:09:22,146 [[ross_invoice_workflow].DatabaseMuleLogin.dispatcher.01] org.mule.transport.jdbc.sqlstrategy.SimpleUpdateSqlStatementStrategy:执行 SQL 语句:更新了 1 行 INFO 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 行 INFO 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 行 INFO 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 行 INFO 2012-12-06 09:09:22,146 [[ross_invoice_workflow].DatabaseMuleLogin.dispatcher.01] org.mule.transport.jdbc.sqlstrategy.SimpleUpdateSqlStatementStrategy:执行 SQL 语句:更新了 1 行 INFO 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 行 INFO 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 行 INFO 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 行

【问题讨论】:

    标签: mule


    【解决方案1】:

    问题在于MULE_CORRELATION_ID 设置为1。由于该关联ID的群组已被处理,因此该群组下发后无法继续使用该ID。在我的条带化测试中,当我在第一组发布后尝试提供更多具有相同相关 ID 的事件时,我实际上收到了错误。

    我建议您在选择查询中添加一个列,该列为所有选定的行返回相同的值,但每次 Mule 运行查询时都会更改。例如,查询可以接收由 Mule 生成的带有 #[java.util.UUID.randomUUID().toString()] 之类的表达式的 UUID,并在列中返回值。然后您可以将此值用作关联 ID,因为它对于所选记录组是相同的。

    假设添加的列名为“CID”,则配置为:

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

    请注意,set-property 是比 message-properties-transformer 更具表现力的配置元素

    【讨论】:

      猜你喜欢
      • 2016-06-08
      • 2021-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-23
      • 1970-01-01
      相关资源
      最近更新 更多