【问题标题】:Preserving or retrieving previous Camel exchange body保留或检索以前的 Camel 交换体
【发布时间】:2015-05-30 11:05:57
【问题描述】:

我正在进行我的第一个 Camel 项目,如果这很明显或令人困惑,敬请见谅。

该应用程序是一个简单的服务,快乐的路径是从一个文件夹中收集一个 PDF,获取一个电子邮件地址来发送它,构建和发送电子邮件(使用 Velocity 模板,以 PDF 作为附件),记录电子邮件已发送,然后删除文件。

但我正在尝试构建一些重试逻辑,将文件移动到单独的文件夹以便稍后重新加载。

我要解决的问题是 Velocity 组件用电子邮件正文覆盖了交换正文,如果我随后用文件使用者组件结束路由,则此电子邮件正文会替换 PDF 内容。

(我认为我不能在文件 producer 组件上使用 'move' 参数,因为我正在使用两个重试文件夹 - 如果稍后再发送电子邮件,我不想重新发送路径中的步骤失败。)

我可以将文件内容复制到交换的另一部分,然后在移动文件之前将其恢复,但这对我来说感觉很邋遢。在恢复处理文件之前,有没有办法从交换的副本中运行电子邮件组件?或者其他获取交换体早期版本的方法?

【问题讨论】:

  • 如果您只想将 PDF 移动到其他位置,以便在出现故障时可以访问这些文件,然后将消息多播到 seda 路由和速度模板路由。这样,两条路由都会有消息的副本。

标签: java apache-camel


【解决方案1】:

如果电子邮件发送失败,我猜你只是想访问旧的消息正文来访问文件对象。 如果我是对的,您可以将文件 Object 存储到交换属性中,然后您可以随时访问它。

【讨论】:

  • 谢谢,我在最后一段中确实提到了这一点。但这有点尴尬,因为我需要确保它在我的路线的不同点被恢复和重新保存。所以我很好奇这是否是已建立(更好)解决方案的常见问题。
  • Camel 在死信camel.apache.org/dead-letter-channel.html 中可以选择使用OriginalMessage,但不支持其他camel 处理器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-25
  • 2014-01-27
  • 2011-05-21
  • 2021-01-09
  • 2013-08-08
  • 2016-01-01
相关资源
最近更新 更多