Eclipse ECF Generic / Zoodiscover(Zookeeper)远程服务在一段时间后丢失

时间:2016-04-22 15:51:30

标签: osgi apache-zookeeper eclipse-ecf

如标题中所述,我想在OSGI环境中使用远程服务。所以我决定用eclipse ECF处理这个问题。在我看来,这是一个非常好的项目来处理OSGI远程服务。因此,对于发现提供商,我使用Zoodiscovery。这些服务使用通用服务属性进行注册。此外,Zoodiscovery用于集中模式,中央IP通过网络广播发布。我把一切都搞定了。但是一段时间后,服务消费者失去了远程服务。

发现远程服务时会显示此消息:

[log;+0000 2016.04.22 15:26:03:564;DEBUG;org.eclipse.ecf.provider.zookeeper;Service Discovered: ServiceInfo[uri=ecfosgirsvc://192.168.178.21:32565/osgirsvc_AMIsPeVObufIp5v5cV6pHNIvzGM=;id=ServiceID[type=ServiceTypeID[typeName=_ecfosgirsvc._default.default._iana];location=ecfosgirsvc://192.168.178.21:32565/osgirsvc_AMIsPeVObufIp5v5cV6pHNIvzGM=;full=_ecfosgirsvc._default.default._iana@ecfosgirsvc://192.168.178.21:32565/osgirsvc_AMIsPeVObufIp5v5cV6pHNIvzGM=];priority=0;weight=0;props=ServiceProperties[{objectClass=de.custom.service.api.IManagerService, endpoint.id=e9dc7ac1-708d-43a6-b2fa-539beff6c732, remote.intents.supported=passByValue exactlyOnce ordered, ecf.endpoint.id=ecftcp://192.168.178.21:2121/server, ecf.rsvc.id=3, endpoint.service.id=174, service.imported.configs=ecf.generic.server, ecf.endpoint.ts=1461329304080, ecf.generic.server.hostname=192.168.178.21, ecf.endpoint.id.ns=org.eclipse.ecf.core.identity.StringID, remote.configs.supported=ecf.generic.server, endpoint.package.version.de.custom.api=1.0.0, endpoint.framework.uuid=70eaf65a-8608-0016-13af-dcea8562a726}]]]

远程服务未被发现时会显示此消息:

[log;+0000 2016.04.22 15:28:53:125;DEBUG;org.eclipse.ecf.provider.zookeeper;Service Undiscovered: ServiceInfo[uri=ecfosgirsvc://192.168.178.21:32565/osgirsvc_AMIsPeVObufIp5v5cV6pHNIvzGM=;id=ServiceID[type=ServiceTypeID[typeName=_ecfosgirsvc._default.default._iana];location=ecfosgirsvc://192.168.178.21:32565/osgirsvc_AMIsPeVObufIp5v5cV6pHNIvzGM=;full=_ecfosgirsvc._default.default._iana@ecfosgirsvc://192.168.178.21:32565/osgirsvc_AMIsPeVObufIp5v5cV6pHNIvzGM=];priority=0;weight=0;props=ServiceProperties[{objectClass=de.custom.service.api.IManagerService, endpoint.id=e9dc7ac1-708d-43a6-b2fa-539beff6c732, remote.intents.supported=passByValue exactlyOnce ordered, ecf.endpoint.id=ecftcp://192.168.178.21:2121/server, ecf.rsvc.id=3, endpoint.service.id=174, service.imported.configs=ecf.generic.server, ecf.endpoint.ts=1461329304080, ecf.generic.server.hostname=192.168.178.21, ecf.endpoint.id.ns=org.eclipse.ecf.core.identity.StringID, remote.configs.supported=ecf.generic.server, endpoint.package.version.de.custom.api=1.0.0, endpoint.framework.uuid=70eaf65a-8608-0016-13af-dcea8562a726}]]]

但是:在主机系统上一切都很好,服务在线。如果我在消费者端重新启动OSGI框架,一切正常,直到此Undiscovery事件。发现和未发现之间的时间段长度相等。

似乎超时未发现服务。如果我通过调用方法来使用该服务,则没有不同的行为。 有谁知道发生了什么?

感谢您的帮助和最好的问候!

更新:

好的一个更新: 当发现远程服务时,我在客户端的本地参数中获取它。当远程服务在客户端未发布时(不在服务器端,如我在上一篇文章中所述),我可以从获取的实例中调用方法。所以代理仍然可用,并且它正常工作,直到我取消发布服务器端的远程服务。因此代理仅在OSGI服务注册表中未发布。

祝你好运!

0 个答案:

没有答案