Это общая проблема в асинхронной связи.Что происходит, когда получатель никогда не получает команду или просто не может ее выполнить (по каким-либо причинам, например, он занят выполнением других действий или запрос находится за пределами определенных параметров)?
Оба ваших варианта действительны, но не будут работать, когда ADN находится в автономном режиме, поэтому ADN-AE2 не может выполнить процедуры.Кроме того, даже когда ADN всегда подключен к сети, у обеих процедур возникают проблемы, когда существует несколько других AE, которые хотят управлять ADN-AE2, или когда IN-AE нетерпеливо устанавливает желаемое состояние снова и снова.Это часто может привести к условиям гонки.
Я бы предложил переосмыслить схему связи между двумя АЕ и разделить оригинальный Контейнер на два: один Контейнер для состояния target идругой контейнер для состояния status .Контейнер target используется AE, кроме ADN-AE2, для установки желаемого состояния.ADN-AE2 уведомляется о создании нового ContentInstance и действует соответственно.Затем он создает новый ContentInstance в контейнере state , который отражает новое внутреннее состояние, и это уведомляет IN-AE об отражении изменения.
Следующий рисунок отражает примерную структуру ресурсадля этого шаблона:
AE ─┬─ Container_target ─── ContentInstances* ◀═══ Container for desired state, set by other AEs
│
└─ Container_state ─── ContentInstances* ◀═══ Container for actual state, set only by this AE
Это общий шаблон в асинхронной связи, когда связь между узлами не всегда надежна или когда результат запроса изменения состояния не всегда гарантируется.Ответственность за выполнение запросов лежит на ADN-AE2, а политика в отношении того, как часто повторяться или реагировать на ошибки, лежит на IN-AE.