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

Karaf中的分布式OSGI消费者服务未启动

阮炯
2023-03-14

我刚刚开始使用动物园管理员在卡拉夫的DOSGi。我在Karaf的一个实例中提供服务,在另一个实例中提供消费者。服务端运行良好。一旦发布,我可以在安装了Zookeeper服务器的Karaf控制台中使用log:display命令查看它,并且我也可以通过浏览器访问wsdl。问题出在消费端。当服务启动时,它应该写一条消息(下面的ref代码),但是它从来没有发生。消费者代码:

package org.osgi.proyecto.dev.internal.consumer;


import org.osgi.proyecto.dev.consumer.IConsumer;   
import org.osgi.proyecto.dev.sensor.ISensor;

public class Consumer implements IConsumer {

public void sensorActivo(ISensor sensor){       
    System.out.println("El sensor esta activo");
}   
}

和component.xml:

<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0"     immediate="true" enabled="true" name="OSGI_Bundle-Consumer">
<implementation class="org.osgi.proyecto.dev.internal.consumer.Consumer"/>
<reference bind="sensorActivo" cardinality="1..1"   interface="org.osgi.proyecto.dev.sensor.ISensor" name="ISensor"  policy="dynamic"/>>
</scr:component>

清单:

  Manifest-Version: 1.0
  Bundle-ManifestVersion: 2
  Bundle-Name: OSGI_Bundle-Consumer
  Bundle-SymbolicName: OSGI_Bundle-Consumer2
  Bundle-Version: 1.0.0.qualifier
  Bundle-RequiredExecutionEnvironment: JavaSE-1.8
  Service-Component: OSGI-INF/component.xml
  Import-Package: org.osgi.framework;version="1.8.0",
   org.osgi.proyecto.dev.sensor

我尝试强制消费者捆绑包(start bundle),它给我这个错误:

启动捆绑包 137 时出错:无法解析OSGI_Bundle-使用者 [137](R 137.1):缺少要求 [OSGI_Bundle-使用者 [137](R 137.1)] osgi.wiring.package;(osgi.wiring.package=org.osgi.proyecto.dev.sensor)未解决的要求: [[OSGI_Bundle-消费者 [137](R 137.1)] osgi.wiring.package;(osgi.wiring.package=org.osgi.proyecto.dev.sensor)]

似乎存在依赖错误。这已解决在消费者实例中安装传感器包(已安装状态)。如何避免在两个Karaf实例中安装相同的传感器包?

共有1个答案

鞠凌龙
2023-03-14

应将服务接口放在单独的捆绑包中。然后,您可以在使用者端安装使用者和接口捆绑包,在服务器端安装服务和接口捆绑包。

 类似资料:
  • 问题内容: 我已经嵌入了Felix。我有一些API捆绑包和Impl。API导出接口。Impl导入该接口并在激活器中注册impl。现在我要获取C隐含的OSGi 现在,我想与它进行交互。我可以反思 但是我不能投 我猜这来自不同的ClassLoader。但是我该如何解决呢?我们如何从外部与OSGi上下文进行交互?或者我们可以将其全部放入OSGi容器中? 问题答案: 如果要嵌入OSGi,则该服务的API(

  • 当消费者实例组出现时,会不会对Kafka的性能产生任何影响。重新启动时id已更改。老年人会发生什么。id它是否仍在代理内存中,或者何时将被删除?假设我有1000个消费者实例,并且所有实例都动态分配组。重新启动时的id。 可以为{log.retention.ms'}提供什么列表值。我可以设置为1毫秒吗?

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

  • apache kafka文档提到以下内容: 如果所有使用者实例具有相同的使用者组,那么记录将有效地在使用者实例上进行负载平衡。 如果所有的使用者实例都有不同的使用者组,那么每个记录都将广播给所有的使用者进程。

  • Feign介绍 Feign是一个声明式的web service客户端,它使得编写web service客户端更为容易。创建接口,为接口添加注解,即可使用Feign。Feign可以使用Feign注解或者JAX-RS注解,还支持热插拔的编码器和解码器。Spring Cloud为Feign添加了Spring MVC的注解支持,并整合了Ribbon和Eureka来为使用Feign时提供负载均衡。 译自:h

  • Ribbon介绍 Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器。我们也很容易使用Ribbon实现自定义的负