我正在尝试使用原型cdi-camel-mq-archetype在自己的命名空间中测试在OpenShift上运行的应用程序。我希望此应用程序使用驻留在同一OpenShift集群上的不同命名空间中的消息代理。但是当我在OpenShift上运行应用程序时,我在POD的日志中看到以下错误:
java.lang.RuntimeException:无法处理@Factory带注释的方法:在bean上创建:com.demo.mqdemotest.ActiveMQComponentFactory。无法查找类型为:bean org.apache.activemq.ActiveMQConnectionFactory for service:broker-tcp。
引起:java.lang.RuntimeException:无法处理@Factory带注释的方法:在bean上创建:com.demo.mqdemotest.mq.ActiveMQConfigurer。无法查找服务代理-tcp。
引起:java.lang.IllegalArgumentException:找不到名称中的kubernetes服务:namespace中的broker-tcp:null
有没有办法将我的经纪人所居住的命名空间注入我的应用程序(因为我没有在fabric8 cdi文档中看到这样做的方法)?如果不是,我怎么能按预期工作呢?
答案 0 :(得分:1)
您有两种选择。取决于您的设置:
将来通过链接支持,您将能够直接从一个项目提供服务到另一个项目。
如果您的OpenShift安装中没有平面网络且没有名称空间隔离,那么您的案例中的问题可能就是您在项目之间引用服务的方式。
如果您在camel-mq
项目中,可以使用以下网址使用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
服务所在的命名空间。