在mule

时间:2017-08-28 09:49:20

标签: mule mule-studio mule-component mule-cluster mule-esb

我在poller中有sfdc(salesforce连接器),并在从sfdc获取数据并将其加载到数据库之后为其启用水印。

<flow name="loadData" processingStrategy="synchronous">
        <poll doc:name="Poll">
            <fixed-frequency-scheduler frequency="2" timeUnit="MINUTES"/>
            <watermark variable="timestamp" default-expression="#[server.dateTime.format(&quot;yyyy-MM-dd'T'HH:mm:ss.SSS'Z'&quot;)]" selector="MAX" selector-expression="#[payload.LastModifiedDate]" object-store-ref="sfdcStore"/>
            <processor-chain doc:name="Processor Chain">
                <logger message="poller started at #[server.dateTime]" level="INFO" doc:name="start"/>
                <sfdc:query config-ref="svccloud_salesforce_configuration" query="SELECT   Name,  ,  Id,  BillingStreet,  BillingCity,  BillingState,  BillingCountry,  BillingPostalCode,  Phone,  Pathway_Status__c  FROM Account  where LastModifiedDate &lt; #[flowVars['timestamp']] and RecordTypeId IN (SELECT Id FROM RecordType where Name = 'Customer')" doc:name="Querying Customer Details"/>
            </processor-chain>
        </poll>
        <logger message="process to DB" level="INFO"/>
</flow>

数据正在获取并正确加载到DB,但最新的Date未存储在timestamp变量中。我收到以下信息消息。如果存储了时间戳值,那么我们将得到什么消息。你能帮忙吗

INFO  2017-08-28 15:06:26,795 [pool-13-thread-1] org.mule.transport.polling.watermark.Watermark: Watermark value will not be updated since poll processor returned no results

2 个答案:

答案 0 :(得分:0)

  1. 查询实际上并未选择LastModifiedDate,因此当轮询尝试更新时,它将始终为null且不会更新。

  2. 查询仅选择时间戳之前的记录,这意味着MAX水印永远不会更新。

答案 1 :(得分:0)

您必须清除应用程序数据,才能解决此问题。如果在studio中运行,水印变量将在本地存储在Object store中。

如果清除应用程序数据,它将按预期工作。 请按照下面的图像清除应用程序数据。

右键点击项目 - &gt;运行方式 - &gt;运行配置 - &gt;常规标签 - &gt;将“清除应用程序数据”更改为“始终”(您需要向下滚动才能看到此选项)。

enter image description here