Apache camel 一个OSGi捆绑包中有多个驼峰蓝图?

Apache camel 一个OSGi捆绑包中有多个驼峰蓝图?,apache-camel,apache-karaf,Apache Camel,Apache Karaf,我试图弄清楚是否应该将多个blueprint.xml文件打包到一个OSGi包中,并将其部署到karaf中。每个blueprint.xml文件都有一个camel上下文。我试着把我所有的蓝图都放到OSGI-INF/blueprint文件夹中,但是我遇到了一个错误 Name“jms”已被注册组件使用 这似乎有道理,因为我在每个blueprint.xml中都这样做 <bean id="jms" class="org.apache.camel.component.jms.JmsComponent"&

我试图弄清楚是否应该将多个blueprint.xml文件打包到一个OSGi包中,并将其部署到karaf中。每个blueprint.xml文件都有一个camel上下文。我试着把我所有的蓝图都放到OSGI-INF/blueprint文件夹中,但是我遇到了一个错误

Name“jms”已被注册组件使用

这似乎有道理,因为我在每个blueprint.xml中都这样做

<bean id="jms" class="org.apache.camel.component.jms.JmsComponent">
    <property name="connectionFactory">
        <bean class="org.apache.activemq.ActiveMQConnectionFactory">
            <property name="brokerURL" value="tcp://0.0.0.0:61616"/>
            <property name="userName" value="karaf"/>
            <property name="password" value="karaf"/>
        </bean>
    </property>
</bean>

我应该这样做吗?或者,每个CamelContext都是自己的包会更好吗?我已经看到了这一点,它说当多个上下文作为独立的捆绑包部署时,它们是有意义的。那么,这里的最佳实践是什么:

  • 每个CamelContext都有自己的blueprint.xml,并与必要的bean绑定到一个osgi包中
  • 为所有必要的bean准备一个包,然后将blueprint.xml文件放到karaf的deploy文件夹中
  • 一个CamelContext导入所有其他CamelContext,与所有必需的bean捆绑在一起
这更多的是关于服务设计的问题,而不是骆驼

由于bundle是一个部署单元,因此我首先要看一看代码的不同生命周期

如果某些东西必须始终部署在一起,如果它们不能单独发展,您可以制作一个包含它们的包。原因很简单,就发布和部署而言,您无法从将代码划分为更小的单元中获益

另一方面,如果某个东西发展得更快或更慢,因此必须更频繁地(或更少地)部署,则应将其放入自己的捆绑包中

这样,只有当代码真正发生变化时,才能部署代码。相比之下,当只实现了一个小的错误修复时,部署一个大型单片应用程序的巨大EAR文件是不同的

因此,总之,您可以或多或少地使用微服务原则将代码“切割”为单元