В муле не удается получить значение из хранилища объектов в другом приложении

Я не могу прочитать значение ключа, хранящегося в хранилище объектов, из App1.

У меня есть 2 приложения, App1, которое хранит значение переменной (скажем, «имя») до некоторого значения (скажем, «abc»). Из App2 я хотел получить значение ключа (имя в нашем случае), но это всегда терпит неудачу с 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"/>

Может ли кто-нибудь направить меня, где я ошибаюсь?


person user4338724    schedule 21.10.2017    source источник


Ответы (1)


Основная причина заключается в том, что оба приложения независимы друг от друга и используют собственное хранилище памяти для сохранения данных.
Таким образом, когда ваше приложение1 сохраняет свои данные, оно сохраняется в собственной памяти в памяти. которое недоступно для app2, так как оно независимо использует собственную память.
Оба приложения ссылаются на собственную конфигурацию хранилища объектов.

Решением для совместного использования хранилища объектов будет доменный проект, в котором вы будете определять одно хранилище объектов в домене, которое будет совместно использоваться всеми его дочерними приложениями, такими как app1, приложение 2, приложение 3 и т. д.

Следуйте инструкциям здесь, как вы можете это сделать: - http://bushorn.com/dealing-with-store-the-object-store/

Для сохранения ObjectStore используйте _defaultUserObjectStore и параметр Persistent ref: https://docs.mulesoft.com/mule-user-guide/v/3.9/object-store-connector#persistingdata

person Anirban Sen Chowdhary    schedule 21.10.2017
comment
Я пробовал способ, упомянутый на bushorn.com, но не работал. После вашего комментария я попытался перезапустить свою студию, и теперь она, как ни странно, работает. Я предполагаю, что он не может уже присутствовать, иначе я получил бы исключение ObjectAlreadyExist, возможно, это было что-то, что я сделал неправильно ранее. Спасибо за ваше предложение, теперь оно работает, проверим это сейчас на кластеризованном ящике Mule. - person user4338724; 22.10.2017