如果捆绑包仍在正常运行,则检查OSGI

时间:2014-09-09 12:40:41

标签: osgi lifecycle osgi-bundle dosgi

我目前正在制作一个看门狗来检查管道中的所有捆绑包是否仍然正常运行。 (这将在分布式环境中,因此故障可能是网络故障,软件故障,其中一个服务器发生故障,......)

因为bundle可以绑定N个服务,N是任意的,所以检查应该使用以下方法递归地进行:

START at the first step in the pipeline
Use getServicesInUse to get the services references of the next step
use getBundle() on the gathered ServiceRerefence objects
REPEAT until we arrive at the bundle we want to stop at

这样我就可以获得管道的所有bundle对象(我假设)现在检查它们是否正常运行(或者只是它们仍然可以访问)我想知道是否

Bundle b = ...
if(b.getState() == Bundle.ACTIVE) ...;

会做的伎俩?当然还有必要的try catch子句来检测硬件/网络故障。

1 个答案:

答案 0 :(得分:1)

你能澄清“管道中所有捆绑包”的含义吗?

你是对的,捆绑可以提供和使用零个或多个服务,但如果我要为OSGi系统创建一个看门狗,我会使用以下两种方法之一:

  1. 如果分布式系统中的节点主要提供REST服务,我会编写一个单独的“监视程序”程序来监视这些REST服务,以查看它们是否仍然响应(在我的分布式系统中的任何节点上)。您既可以进行“真正的”调用,也可以只请求一些HEAD并查看是否收到回复。
  2. 如果分布式系统中的节点主要提供OSGi服务,我会编写一个监视程序包并将其部署到每个节点。然后我会向我的看门狗添加一个REST端点,以允许我远程监控它(由另一个看门狗监控,类似于方法#1)。
  3. 检查捆绑包的活动状态不会告诉您任何信息。捆绑包一旦启动就会保持活动状态,但它们提供的服务可能没有响应。