构建一个通用的Camel / Docker镜像,并在容器启动时应用不同的Camel路径

时间:2017-06-03 01:03:23

标签: docker apache-camel

我已经要求使用Apache Camel创建一些冒充者/存根/反射器(选择你自己的术语......)。这些存根需要:

  • 收听一堆IBM MQ队列
  • 每个队列
  • 在消息显示时从队列中抓取消息
  • 通过简单的XPath或正则表达式提取从邮件中提取信息,并通过模板构建响应
  • 等待一段预定义的时间
  • 将回复发送回另一个队列

我没有骆驼专家,但我可以知道如何做到这一点......

但是,鉴于有很多这些存根,并且我想在不同情况下使用这些存根的不同子集,我想构建一个泛型 Camel Docker镜像,并且当我启动Docker容器时,将不同的存根集应用于它。

如果它有助于进一步澄清事情,我希望能够将存根定义存储为git repos中的未编译的代码(例如XML,Simple,等等) - 与Docker映像分开 - 并且Docker / Camel容器通过volume mount / s或环境变量加载这些存根定义。一旦容器启动,那些存根图像将持续存在直到容器被杀死 - 我不需要操纵存根,除非容器启动。

关键是Camel / Docker镜像必须是通用的,而不是使用一组特定的存根定义预先构建。

我可以处理Docker方面的事情 - 我可以解决的是如何让Camel在Camel启动时(即创建Docker容器时)加载存根定义而不是将存根加载到例如编译时的WAR。

感谢您的任何帮助或建议

1 个答案:

答案 0 :(得分:0)

使用以下方式可以轻松实现:

  • Camel / Docker图像有主cmd从spring xml运行camel路由(你可以使用你想要的任何逻辑,如骆驼独立或弹簧启动等。)
  • Spring XML文件是从某个位置读取的,例如在Docker镜像中硬编码(例如/app/config.xml)
  • 您将启动docker容器并将所需的spring XML文件映射到/app/config.xml

如果您无法将XML文件映射到正在运行的容器,那么您可以实现自己的小启动部分,它将在启动时从某些env变量读取XML内容,将其存储到临时文件中并运行相同的逻辑以使用文件上下文启动spring 。在这种情况下,您可以运行docker容器并将spring XML作为env传递。变量