0

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

因为一个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 b = ...
if(b.getState() == Bundle.ACTIVE) ...;

会成功吗?当然,也可以使用必要的 try catch 子句来检测硬件/网络故障。

4

1 回答 1

1

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

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

  1. 如果您的分布式系统中的节点主要提供 REST 服务,我将编写一个单独的“看门狗”程序来监视这些 REST 服务以查看它们是否仍然响应(在我的分布式系统中的任何节点上)。您可以进行“真正的”调用,也可以只请求一些 HEAD 并查看是否得到响应。
  2. 如果分布式系统中的节点主要提供 OSGi 服务,我会编写一个监视程序包并将其部署到每个节点。然后,我将向我的看门狗添加一个 REST 端点,以允许我远程监控它(通过另一个看门狗,类似于方法 #1)。

检查捆绑包的活动状态不会告诉您任何信息。捆绑包在启动后将保持活动状态,但它们提供的服务可能没有响应。

于 2014-09-10T05:35:14.417 回答