0

当我使用 cloudify(2.7) 部署应用程序时(例如一个应用程序应用程序包括两个服务 A 和 B ),我尝试使用Admin.addEventListener()添加一些事件监听器,但它不起作用!

我尝试添加ProcessingUnitStatusChangedEventListener,当我调试代码时,值(ProcessingUnitStatusChangedEvent)event.getNewStatus()SCHEDULED变为INTACT,然后SCHEDULED,然后INTACT,我也尝试添加ProcessingUnitInstanceLifecycleEventListener,当我调试代码时,状态是intact,但服务不可用!

是否有任何其他侦听器或方法可以知道应用程序(而不是服务)可用,或者我listener以错误的方式使用?

4

1 回答 1

0

首先,Admin API 是内部的 - 使用它需要您自担风险。而且你不应该像现在这样使用它——Cloudify 在内部管理 API 之上添加了很多逻辑。

其次,不清楚您从哪里执行代码。

您始终可以使用其余客户端来获取应用程序的准确状态。看看https://github.com/CloudifySource/cloudify/blob/master/rest-client/src/main/java/org/cloudifysource/restclient/RestClient.java#L388

此外,如果您在服务生命周期事件处理程序中运行此代码,实现此功能的最简单方法是让您的“顶级”服务(应该最后可用的服务)将应用程序条目写入共享属性存储在它的“postStart”事件。其他所有人都可以定期轮询此条目。轮询本身非常快,都是内存中的操作。

如果您没有顶级服务,或者您的逻辑更复杂,则需要使用服务上下文 API 扫描每个服务及其实例以查看它们是否已启动。关于获取服务实例状态的解释可以在这里找到: cloudify service dependsOn other service

于 2014-10-12T07:26:12.413 回答