【问题标题】:Multiple camel blueprints in one OSGi bundle?一个 OSGi 包中的多个骆驼蓝图?
【发布时间】:2020-01-11 10:36:14
【问题描述】:

我正在尝试确定是否应该将多个 blueprint.xml 文件打包到一个我想要部署到 karaf 的 OSGi 包中。每个 blueprint.xml 文件都有一个骆驼上下文。我试图把我所有的蓝图都扔到 OSGI-INF/blueprint 文件夹中,但是我收到一个错误提示

Name 'jms' is already in use by a registered component

这似乎有道理,因为我在每个 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 是它自己的捆绑包会更好吗?我已经看到了这个https://camel.apache.org/manual/latest/faq/why-use-multiple-camelcontext.html,它说当多个 CamelContexts 被部署为独立的包时会有意义。那么这里的最佳做法是什么:

  • 每个 CamelContext 都有自己的 blueprint.xml,与必要的 bean 捆绑到一个 osgi-bundle 中?
  • 一个包含所有必要 bean 的包,只需将 blueprint.xml 文件放到 karaf 的部署文件夹中?
  • 一个 CamelContext 可以导入所有其他 CamelContext,并与所有必要的 bean 捆绑在一起?

【问题讨论】:

    标签: apache-camel apache-karaf


    【解决方案1】:

    这更多是关于服务设计的问题,而不是 Camel。

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

    如果某些东西必须始终一起部署,如果它们不能单独发展,您可以制作一个包含它们的捆绑包。仅仅是因为,在发布和部署方面,您无法从将代码分成更小的单元中获利。

    另一方面,如果某些东西发展得更快或更慢,因此必须更频繁(或更频繁地)部署,您应该将它放在自己的包中 .

    这样您就可以仅在代码真正发生变化时部署代码。与一个巨大的 EAR 文件相比,当只实施一个小错误修复时,部署一个大型的单体应用程序。

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

    【讨论】:

      猜你喜欢
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-27
      • 1970-01-01
      • 2015-05-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多