当我使用cloudify(2.7)部署应用程序时(例如,应用程序应用程序包含两个服务A和B),我尝试使用Admin.addEventListener()
添加一些eventListener,但它不起作用!
我尝试添加ProcessingUnitStatusChangedEventListener
,当我调试代码时,(ProcessingUnitStatusChangedEvent)event.getNewStatus()
的值从SCHEDULED
变为INTACT
,然后变为SCHEDULED
,然后再次INTACT
,
我还尝试添加ProcessingUnitInstanceLifecycleEventListener
,当我调试代码时,状态为intact
,但该服务不可用!
是否有其他监听器或方法可以知道应用程序(而不是服务)是否可用,或者我以错误的方式使用listener
?
答案 0 :(得分:0)
首先,Admin API是内部的 - 使用它需要您自担风险。并且您不应该按照自己的方式使用它 - Cloudify在内部Admin API之上添加了许多逻辑。
其次,从哪里执行代码并不十分清楚。
您始终可以使用其余客户端来获取应用程序的准确状态。看https://github.com/CloudifySource/cloudify/blob/master/rest-client/src/main/java/org/cloudifysource/restclient/RestClient.java#L388
此外,如果您在服务生命周期事件处理程序中运行此代码,实现此目的的最简单方法是让您的' top'级别服务,最后应该可用的服务,在其“postStart”中将应用程序条目写入共享属性存储区。事件。其他人都可以定期轮询此条目。轮询本身非常快,都是内存中的操作。
如果您没有顶级服务,或者您的逻辑比这更复杂,则需要使用服务上下文API扫描每个服务及其实例以查看它们是否已启动。有关获取服务实例状态的说明,请访问: cloudify service dependsOn other service