如何在 cdi-camel 中使用外部 OpenShift 命名空间

How to use an external OpenShift namespace in cdi-camel

我正在尝试使用原型 cdi-camel-mq-archetype 在其自己的命名空间中测试 OpenShift 上的应用程序 运行。我希望此应用程序使用驻留在同一 OpenShift 集群上的不同命名空间中的消息代理。但是当我 运行 OpenShift 上的应用程序时,我在 POD 的日志中看到以下错误:

java.lang.RuntimeException: Failed to process @Factory annotated method: create on bean: com.demo.mqdemotest.ActiveMQComponentFactory. Failed to lookup bean of type: class org.apache.activemq.ActiveMQConnectionFactory for service: broker-tcp.

Caused by: java.lang.RuntimeException: Failed to process @Factory annotated method: create on bean: com.demo.mqdemotest.mq.ActiveMQConfigurer. Failed to lookup service broker-tcp.

Caused by: java.lang.IllegalArgumentException: No kubernetes service could be found for name: broker-tcp in namespace: null

有没有办法将我的代理所在的命名空间注入我的应用程序(因为我在 fabric8 cdi 文档中没有看到这样做的方法)?如果不是,我怎么能让它按预期工作?

你有两个选择。根据您的设置:

将来通过链接支持,您将能够直接提供从一个项目到另一个项目的服务。

如果您的 OpenShift 安装中有一个平面网络并且没有名称空间隔离,那么您遇到的问题可能是您如何在项目之间引用您的服务。

如果您在 camel-mq 项目中,则可以通过 url:

使用 mq-demo 项目中的服务
<service>.mq-demo.svc.cluster.local:<port>

要在您的 mq-demo 运行 中获得服务:

oc get svc -n mq-demo

可在此处找到有关网络的更多信息:OpenShift Origin: Networking

下一种可能性 - 基于异常消息 broker-tcp in namespace: null。也许您应该指定 broker-tcp 服务所在的命名空间。