在mule中无法从不同应用程序中的Object Store检索值

时间:2017-10-21 19:34:15

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

我无法从App1读取存储在Object Store中的密钥值。

我有2个应用程序,App1将变量的值(比如'name,)存储到某个值(比如'abc')。从App2开始,我想检索键的值(在我们的例子中是'name'),但它总是因org.mule.api.store.ObjectDoesNotExistException而失败。

如果两个流程都在同一个应用程序上,那么它可以正常工作,但这不是预期的行为。

两个应用程序都在同一个运行时运行,因此它应该能够检索该值。

以下是我的App1代码

<flow name="objectstore1Flow">
    <http:listener config-ref="HTTP_Listener_Configuration" path="/retrieve" allowedMethods="GET" doc:name="HTTP"/>
    <set-variable value="abc" variableName="name" doc:name="Variable" />
    <objectstore:store config-ref="ObjectStore__Connector" key="name" value-ref="#[flowVars.name]" doc:name="ObjectStore" />
</flow>

App2代码

<flow name="objectstore2Flow">
    <http:listener config-ref="gcc-httpDomainListenerConfig" path="/store2" allowedMethods="GET" doc:name="HTTP"/>
    <objectstore:retrieve config-ref="ObjectStore__Connector" key="name" doc:name="ObjectStore" targetScope="INVOCATION"/>
    <logger message="Value of name from cache is : #[payload]" level="INFO" doc:name="Logger"/>
</flow>

应用程序的对象存储配置是:

<objectstore:config name="ObjectStore__Connector" partition="name_value" doc:name="ObjectStore: Connector"/>

有人可以指导我,我错了吗?

1 个答案:

答案 0 :(得分:1)

主要原因是应用程序彼此独立并使用自己的内存存储来保存数据 因此,当您的 app1 存储其数据时,它会存储在自己的内存中,而 app2 则无法存储,因为它独立使用自己的内存。 /> 这两个应用程序都指自己的Object Store配置。

共享对象存储的解决方案将是一个域项目,您将在该项目中定义域中的单个对象存储,并将在其所有子应用程序之间共享,例如 app1 app2 app3

按照此处的步骤操作: - http://bushorn.com/dealing-with-store-the-object-store/

对于Persisting ObjectStore,使用_defaultUserObjectStore持久选项参考:https://docs.mulesoft.com/mule-user-guide/v/3.9/object-store-connector#persistingdata