当排名较高的OSGI服务可用时,如何重新连接?

当排名较高的OSGI服务可用时,如何重新连接?,osgi,service-reference,blueprint,Osgi,Service Reference,Blueprint,我有两个osgi服务,它们以不同的服务质量实现相同的接口。一个默认排名为0,另一个默认排名为3 我正在搜索一个蓝图配置,其中默认服务充当后备服务。因此,每一个其他捆绑包都应该使用最好的可用服务(排名最高),如果更好的服务消失,那么必须退回到默认服务 这正在起作用 缺少的部分是在更好的服务再次上线时自动重新连接到该服务。有没有办法只配置服务而不更改使用者(实现ServiceTracker等)?声明性服务通过贪婪策略选项支持这一点。我不知道这在蓝图中是可能的。我认为这不可能直接作为一个简单的蓝图 不

我有两个osgi服务,它们以不同的服务质量实现相同的接口。一个默认排名为0,另一个默认排名为3

我正在搜索一个蓝图配置,其中默认服务充当后备服务。因此,每一个其他捆绑包都应该使用最好的可用服务(排名最高),如果更好的服务消失,那么必须退回到默认服务

这正在起作用


缺少的部分是在更好的服务再次上线时自动重新连接到该服务。有没有办法只配置服务而不更改使用者(实现ServiceTracker等)?

声明性服务通过贪婪策略选项支持这一点。我不知道这在蓝图中是可能的。

我认为这不可能直接作为一个简单的蓝图

不过,您可以使用
元素

 <reference-listener bind-method=”bind” unbind-method=”unbind”>
   <bean class=“MyListenerClass”/>        
  </reference-listener>


它允许在引用发生更改并对这些更改做出反应时回调。例如,您可以为您的服务创建一个代理,以确保调用正确的服务。但这并不是很漂亮的代码。因此,像BJ建议的那样,声明性服务可以为这种情况提供更干净的解决方案。

因此代理应该具有ranking=“5”。。。但当代理死后,我又遇到了同样的问题:(使用DS意味着改变消费者。不管怎样,谢谢你的澄清。不完全是。我的意思是听所有的服务,然后自己选择排名最高的服务。这比应该的要复杂一些,但如果你真的需要的话是可行的。