【发布时间】: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&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