【问题标题】:No component found with scheme未找到带有方案的组件
【发布时间】:2019-09-23 15:19:06
【问题描述】:

这真的很奇怪。

我有 4 个 docker 实例。 Docker 正在运行 Fuse 7.3 和 AMQ。

它们是相同的,除了一些配置变量。我已经区分了 /etc/ 文件夹,并且没有任何配置会导致这种情况。

Fuse 日志启动是相同的。

但是,我在 Jenkins 中构建的新服务安装到每个服务的主机卷中,仅适用于 4 个实例中的 1 个。

所以,几乎相同的 docker,完全相同的 jar 文件。 4 人中有 3 人抱怨:

 Failed to resolve endpoint: artemis://queue:authRequest due to: No component found with scheme: artemis

我正在定义 bean:

<bean id="artemisConnectionFactory" class="org.apache.activemq.artemis.jms.client.ActiveMQJMSConnectionFactory">
    <argument value="${activeMq.Uri}"/>
    <argument value="${activeMq.userName}"/>
    <argument value="${activeMq.password}"/>
</bean>

<bean id="artemis" class="org.apache.camel.component.jms.JmsComponent">
    <property name="connectionFactory" ref="artemisConnectionFactory"/>
</bean>

路线是:

<camel:route id="proxyqueue">  
    <camel:from uri="artemis:queue:authRequest"/>  
    <camel:to uri="log:input?showAll=true&amp;level=INFO"/>
    <camel:to uri="{{auth.uri}}"/>
</camel:route>

auth.uri 对所有人都是一样的。 相同的设置适用于其他十几个罐子。我勒个去。我重新启动了所有码头工人。 4 个作品中的 1 个。我尝试使用activemq: 而不是artemis:,同样的事情。比较了 Fuse 中的所有功能。都一样。相同的版本。

在报错之前,坏掉的有这个:

No matching service for optional OSGi service reference (&(component=artemis)(objectClass=org.apache.camel.spi.ComponentResolver))

虽然工作的人有这个:

Created ClientConnectionManager org.apache.http.impl.conn.PoolingHttpClientConnectionManager@10fe02ef

【问题讨论】:

  • 这个问题似乎与 Artemis 控制范围内的任何事情都没有直接关系,所以我删除了activemq-artemis 标签。
  • 好的,我重新启动了所有的 docker,现在另一个正在工作。所以这很可能与 karaf 启动顺序有关。但这仍然很奇怪。
  • 所以我增加了加载功能和安装服务之间的时间,并且运行的服务多达 4 个。打算再尝试复制结果几次。我不明白的是,如果我安装我的服务,大概是在加载所有功能之前,为什么它会永久地弄乱我的 OSGi 及其安装该服务的机会?一旦我收到“没有找到带有方案的组件:artemis”的消息,就无法修复它。
  • 好的,再试一次,加载功能和服务之间的延迟同样长,降到 2/4。而且只有这个服务。 OSGi 是黑魔法。
  • 最终用代码而不是骆驼 xml 重写,它起作用了。出于某种原因,OSGi 接线中有一半时间出错了,因此 org.apache.camel.spi.ComponentResolver 要么为我的服务解析 camel-http4,要么在 XML 中不解析。那好吧。解决方法是不使用 activemq 到 camel-http4 XML DSL。

标签: docker apache-camel apache-karaf jbossfuse


【解决方案1】:

这是一个竞争条件,有时您的集成比 artemis 先开始,因此该方案未解决,因此出现错误。请更新 pom 上的导入部分,并参考 artemis 库,通常是您使用的任何库。这是我的 camel-beanio 示例:

<!-- to generate the MANIFEST-FILE of the bundle -->
<plugin>
  <groupId>org.apache.felix</groupId>
  <artifactId>maven-bundle-plugin</artifactId>
  <version>${maven.bundle.plugin.version}</version>
  <extensions>true</extensions>
  <configuration>
    <instructions>
      <Bundle-SymbolicName>${project.name}</Bundle-SymbolicName>
      <Private-Package>com.mycustomer.*</Private-Package>
      <Import-Package>											
        io.fabric8.zookeeper,
        org.apache.camel.spi,
        org.beanio,       
        *
      </Import-Package>						
      <Export-Service>${camel.osgi.export.service}</Export-Service>
    </instructions>
  </configuration>
</plugin>

使用 Maven Central https://search.maven.org/ 获取问题库版本的确切依赖项

【讨论】:

    猜你喜欢
    • 2015-01-22
    • 1970-01-01
    • 2017-11-16
    • 2014-11-03
    • 1970-01-01
    • 2018-01-06
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多