【问题标题】:Mule 3.7: start specific flow before othersMule 3.7:先于其他人开始特定流程
【发布时间】:2016-03-04 04:22:35
【问题描述】:

我有一个从 postgres 加载数据的流程,我希望这个流程在其他流程之前执行,我有很多流程。我正在尝试在 Mule 3.7 中执行此操作

我有串行的 http 入站,几乎所有这些都需要这个从 postgres 加载数据的流,所以它们不能是私有的

我该怎么做?

【问题讨论】:

    标签: mule


    【解决方案1】:

    您要稍后执行的所有流程,使其初始状态停止如下:- <flow name="..." initialState="stopped">
    现在,部署应用程序时,您不想执行的所有流都不会运行。

    现在在从 postgres 加载数据的流程结束时,在从 DB 加载数据后,启动所有停止的流程如下:-

    <scripting:component>
        <scripting:script engine="groovy">
            muleContext.registry.lookupFlowConstruct('targetFlow').start()
        </scripting:script>
    </scripting:component>
    

    这将启动所有其他已停止的流程,并将在您想要的流程之后执行,我希望这能满足您的要求。

    【讨论】:

    • 我使用这种策略,但我没有使用 groovy,而是使用 app.registry.targetFlowName.start();
    【解决方案2】:

    在您的问题中提供有限的上下文的情况下,一种方法是将您想要运行的流程设为public(意思是,定义一个入站端点)并将其他流程设为private,您称之为明确使用flow-ref

    编辑:你可以在对象存储中定义一个变量loadCache,初始值为false,当你运行其他流程时,他们首先检查loadCache是否是仍然是false,然后调用loadData 流和loadData 流在完成时会将变量的值设置为true。所以任何其他需要缓存数据的流,都会检查这个变量并基于它使用cache数据或调用函数来加载数据

    类似这样的:

    <flow...>
            ....
       <!-- flows with http or other inbounds -->
       <objectstore:retrieve config-ref="ObjectStore__Configuration" key="cacheLoad" defaultValue-ref="#[false]" targetProperty="flowVars.cacheLoad" doc:name="retrieve cacheLoad"/>
    
    </flow>
    
    <flow> ... 
       <!--load data from postgress-->
       <objectstore:store config-ref="ObjectStore__Configuration" key="cacheLoad" value-ref="#[true]" doc:name="store cacheLoad"/>              
    
    </flow>
    

    对象存储参考https://docs.mulesoft.com/mule-user-guide/v/3.7/mule-object-stores

    另一种选择是使用注册表对象而不是对象存储https://docs.mulesoft.com/mule-user-guide/v/3.7/storing-objects-in-the-registry

    【讨论】:

    • 我有串行 http 入站,几乎所有这些都需要从 postgres 加载数据的流,所以它们不能是私有的
    • 请更好地解释您的情况。当您说我希望在其他流程之前执行此流程时,您的意思是在您的其他公共流程被触发之前或早上第一件事或什么?
    • 我需要在启动 mule 时先执行此流程,因为我从 postgres 加载数据并将数据保存在内存中,然后在其他流程中我从内存中获取数据,这种方式我不'不需要再次执行查询。
    • 这个缓存什么时候过期?你打算如何重新加载内存中的数据?
    • 我有石英,每 2 小时重新加载一次数据
    【解决方案3】:

    您可以在停止状态下加载所有依赖流并让您的核心流首先启动,一旦成功启动,您就可以按照您想要的顺序触发其余流的启动。

    【讨论】:

      猜你喜欢
      • 2012-03-22
      • 2016-01-13
      • 2014-12-30
      • 2012-12-20
      • 1970-01-01
      • 1970-01-01
      • 2018-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多