在 Fabric8 中,获取ActiveMQ连接的首选方法是通过mq-fabric profile,它通过Declarative Services提供ActitveMQConnection对象。 An example of this is given on GitHub,效果很好。
但是,我还没有找到一种方法让Declarative Services和Blueprint Services在Fabric8(或任何OSGI环境)中进行协作,因此,我的OSGI应用程序必须使用DS或蓝图。混合两者似乎都不是一种选择。
如果您想使用蓝图(我这样做),您必须首先通过Web UI创建代理,然后返回控制台并键入 cluster-list ,找到Fabric8的端口分配给代理,然后在蓝图中配置连接,如下所示:
<bean id="activemqConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://mydomain:33056" />
<property name="userName" value="admin" />
<property name="password" value="admin" />
</bean>
虽然这确实有效,但它并不完全适合部署,因为它涉及一些我想尽可能避免的手动步骤。主要问题是我不知道该端口将是什么。我已经梳理了配置文件,无法在任何地方找到它。
是否有更清洁,更自动化的方式通过蓝图在Fabric8中获取ActiveMQ连接,还是我们必须使用声明式服务?
答案 0 :(得分:0)
在fabric-camel-demo中偶然发现了这个问题的解决方案,它解释了如何通过Blueprint在Fabric8中实例化ActiveMQConnectionFactory bean。
<!-- use the fabric protocol in the brokerURL to connect to the ActiveMQ broker registered as default name -->
<!-- notice we could have used amq as the component name in Camel, and avoid any configuration at all,
as the amq component is provided out of the box when running in fabric -->
<bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="discovery:(fabric:default)"/>
<property name="userName" value="admin"/>
<property name="password" value="admin"/>
</bean>
希望这有帮助!