Mulesoft 批处理多个连接器
Mulesoft Batch Processing Multiple Connectors
我有 3 个 Salesforce 实例,我需要从中轮询数据,然后通过带水印的更改对该数据执行操作。我正在尝试以一种足够动态的方式设计它,如果我需要添加另一个 X 数量的源,我不会复制所有批次共有的一堆业务逻辑。
这是一个示例,说明我的当前流程在单个 Salesforce 组织中的样子。
现在我希望做的是能够以某种方式在配置文件上使用 for-each
允许我从 .properties
文件中提取登录凭据并轮询每个组织然后适当地处理记录。
有没有一种方法可以将其构造为具有多个 polls/batches,但使用不同的连接器?
所有组织的查询都是一样的,只是连接不同。
我的 .properties
文件看起来像这样:
sf.org1.user=email@domain.com
sf.org1.pass=![encrypted]
sf.org1.token=![encrypted]
sf.org2.user=email@domain.com
sf.org2.pass=![encrypted]
sf.org2.token=![encrypted]
我能否以动态方式执行此操作,或者我是否需要为我添加的每个组织添加批处理?
如果您添加一个 属性 用逗号分隔的组织列表,它可以拆分成一个列表。使用 <foreach>
列表的每个元素都可用于参数化每个组织的同一批次的执行。
我会从批处理中获取轮询来触发流程。
示例属性:
organizations=org1,org2
示例流程和批次:
<flow name="pollFlow">
<poll doc:name="Poll" >
<fixed-frequency-scheduler frequency="10" timeUnit="SECONDS"/>
<logger message="Flow started" level="INFO" doc:name="Logger"/>
</poll>
<dw:transform-message doc:name="Transform Message">
<dw:input-payload mimeType="application/java" />
<dw:set-payload><![CDATA[%dw 1.0
%output application/java
---
p('organizations') splitBy ',' map {
user: p('sf.' ++ $ ++ '.user'),
pass: p('sf.' ++ $ ++ '.pass'),
token: p('sf.' ++ $ ++ '.token')
}
]]>
</dw:set-payload>
</dw:transform-message>
<logger message="list of orgs credential: #[payload]" level="INFO" doc:name="Logger"/>
<foreach doc:name="For Each">
<batch:execute name="so-dynamic-propertiesBatch" doc:name="Batch Execute" />
</foreach>
</flow>
<batch:job name="orgBatch">
<batch:input>
<logger message="on input phase #[payload]" level="INFO" doc:name="Logger" />
<!-- here do the request with credentials payload.user, payload.pass and payload.token -->
</batch:input>
<batch:process-records>
<batch:step name="Batch_Step1">
...
我有 3 个 Salesforce 实例,我需要从中轮询数据,然后通过带水印的更改对该数据执行操作。我正在尝试以一种足够动态的方式设计它,如果我需要添加另一个 X 数量的源,我不会复制所有批次共有的一堆业务逻辑。
这是一个示例,说明我的当前流程在单个 Salesforce 组织中的样子。
现在我希望做的是能够以某种方式在配置文件上使用 for-each
允许我从 .properties
文件中提取登录凭据并轮询每个组织然后适当地处理记录。
有没有一种方法可以将其构造为具有多个 polls/batches,但使用不同的连接器?
所有组织的查询都是一样的,只是连接不同。
我的 .properties
文件看起来像这样:
sf.org1.user=email@domain.com
sf.org1.pass=![encrypted]
sf.org1.token=![encrypted]
sf.org2.user=email@domain.com
sf.org2.pass=![encrypted]
sf.org2.token=![encrypted]
我能否以动态方式执行此操作,或者我是否需要为我添加的每个组织添加批处理?
如果您添加一个 属性 用逗号分隔的组织列表,它可以拆分成一个列表。使用 <foreach>
列表的每个元素都可用于参数化每个组织的同一批次的执行。
我会从批处理中获取轮询来触发流程。
示例属性:
organizations=org1,org2
示例流程和批次:
<flow name="pollFlow">
<poll doc:name="Poll" >
<fixed-frequency-scheduler frequency="10" timeUnit="SECONDS"/>
<logger message="Flow started" level="INFO" doc:name="Logger"/>
</poll>
<dw:transform-message doc:name="Transform Message">
<dw:input-payload mimeType="application/java" />
<dw:set-payload><![CDATA[%dw 1.0
%output application/java
---
p('organizations') splitBy ',' map {
user: p('sf.' ++ $ ++ '.user'),
pass: p('sf.' ++ $ ++ '.pass'),
token: p('sf.' ++ $ ++ '.token')
}
]]>
</dw:set-payload>
</dw:transform-message>
<logger message="list of orgs credential: #[payload]" level="INFO" doc:name="Logger"/>
<foreach doc:name="For Each">
<batch:execute name="so-dynamic-propertiesBatch" doc:name="Batch Execute" />
</foreach>
</flow>
<batch:job name="orgBatch">
<batch:input>
<logger message="on input phase #[payload]" level="INFO" doc:name="Logger" />
<!-- here do the request with credentials payload.user, payload.pass and payload.token -->
</batch:input>
<batch:process-records>
<batch:step name="Batch_Step1">
...