当前位置: 首页 > 知识库问答 >
问题:

OSGI:如何更新消费者包

洪浩
2023-03-14

我一直在试图理解一种奇怪的OSGI行为。希望有人能解释一下。这是我的设置

1)使用eclipse\plugins\org.eclipse.osgi_3.7.0.v20110613.jar

2) 我有一个导出服务的包(HelloworldService)

它在activator中注册服务

    public void start(BundleContext context) throws Exception {

        IHelloService helloService = new HelloServiceImpl();
        helloServiceRegistration =context.registerService(
                                  IHelloService.class.getName(), helloService, null
);


    }

3) 我有一个“消费者”捆绑包,通过ServiceTracker使用该服务


        ServiceReference externalServiceReference = Activator.getContext().getServiceReference(IHelloService.class.getName());
        IHelloService externalService = (IHelloService) Activator.getContext().getService(externalServiceReference);

现在,当我将这两个罐部署到OSGI(helloworld.jar和helloworldservice.jar)时;它工作正常。我能够得到一个'IHelloService'impl对象并对其进行调用。我可以启动/停止捆绑,当他们回来时;工作正常

当我卸载然后安装HelloWorldservice捆绑包时,就会出现问题。在这种情况下,'Helloworld'消费者外部服务引用为NULL。如果我查看捆绑信息;我看到这个


osgi> bundle 1
mypackage.helloworld_1.0.0.qualifier [1]
  Id=1, Status=RESOLVED    Data Root=C:\Users\\dev\eclipse\plugins\configuration\org.eclipse.obundles\1\data
  No registered services.
  No services in use.
  No exported packages
  Imported packages
    mypackage.helloworldservice; version="0.0.0" **stale**
    org.osgi.framework; version="1.6.0"
    org.osgi.util.tracker; version="1.5.0"
  No fragment bundles
  Named class space
    mypackage.helloworld; bundle-version="1.0.0.qualifier"[provided]
  No required bundles

请注意,它的“导入包”已经过时。这是有问题的线路

导入的包mypackage.helloworldservice;version="0.0.0"

现在我可以通过从控制台发出更新命令来解决这个问题。

这是我的问题

1)我如何从我的消费者捆绑包中编程地做到这一点...2)如果我在一个生产系统上,并且我部署了helloworlservice.jar的新副本(替换现有版本);我必须更新它的所有用户吗...我以为服务追踪器会马上给我提供服务

谢谢

共有1个答案

叶茂
2023-03-14

消费者包导入mypackage。来自服务jar的helloworldservice包。卸载服务jar时,消费者jar仍然从卸载的服务jar连接到现在过时的包。当您安装一个新的服务jar时,它会导出mypackage的一个新“副本”。helloworldservice包(我怀疑服务jar也没有导入mypackage.helloworldservice包)。因此,您需要刷新消费者jar,使其连接到新的mypackage。helloworldservice包。

 类似资料:
  • 我花了几个小时想弄清楚发生了什么,但没能找到解决办法。 这是我在一台机器上的设置: 1名zookeeper跑步 我正在使用kafka控制台生成器插入消息。如果我检查复制偏移量(

  • 谁能请解释和指导我链接或资源阅读关于Kafka消费者如何在下面的场景下工作。 > 一个有5个消费者的消费者组和3个分区的主题(Kafka是如何决定的) 一个消费者组有5个消费者,主题有10个分区(kafka如何分担负载) 两个消费者组和两个服务器的kafka集群,其中一个主题被划分在节点1和节点2之间,当来自不同组的消费者订阅到一个分区时,如何避免重复。 上面可能不是配置kafka时的最佳实践,但

  • 本文向大家介绍Kafka 的消费者如何消费数据相关面试题,主要包含被问及Kafka 的消费者如何消费数据时的应答技巧和注意事项,需要的朋友参考一下 消费者每次消费数据的时候,消费者都会记录消费的物理偏移量(offset)的位置 等到下次消费时,他会接着上次位置继续消费

  • 是否有一种方法以编程方式访问和打印使用者滞后偏移,或者说使用者读取的最后一条记录的偏移与某个生产者写入该使用者分区的最后一条记录的偏移之间的位置差。 要知道我的最终目标是将这个值发送到prometheus进行监视,我应该在上面添加哪些语句来得到滞后偏移值?

  • 我们有一个制作人 在开发过程中,我重新部署了producer应用程序,并做了一些更改。但在此之后,我的消费者没有收到任何消息。我尝试重新启动消费者,但没有成功。问题可能是什么和/或如何解决? 消费者配置: 生产者配置: 编辑2: 5分钟后,消费者应用程序死亡,但以下情况除外:

  • 我有一个springboot消费者应用程序。当我第一次运行它时,它消耗了来自Kafka主题的信息。但当我再次运行它时,它停止了消耗。在日志中,我看到以下消息。 我知道消费者无法获得偏移量。在这种情况下,消费者将引用自动偏移重置属性。如您所见,我已将其设置为,希望消费者从头开始阅读。但它没有。 应用程序. yml 在我的Java课上 我尝试了一些东西。 我将值设置为。不出所料,它抛出了一个异常,抱怨