【问题标题】:When to use Camel Wiretap or SEDA?何时使用 Camel Wiretap 或 SEDA?
【发布时间】:2014-08-08 08:33:03
【问题描述】:

在我的 Camel Route 中,当我的 onException 处理程序发生异常时,我需要向 JMS 发送消息。为了加快主路由,我尝试通过Wiretap异步发送消息

我尝试使用这样的东西:

onException().handled(true).logHandled(true)
  .wiretap("seda:another_queue").end();
...
from("seda:another_queue?concurrentConsumers=5")
  .to("jms:queue_for_my_exception_messages");

是否有必要使用Wiretap,或者我可以像这样只使用SEDA 队列:

onException().handled(true).logHandled(true)
  .to("seda:another_queue").end();
...
from("seda:another_queue?concurrentConsumers=5")
  .to("jms:queue_for_my_exception_messages");

【问题讨论】:

    标签: asynchronous apache-camel


    【解决方案1】:

    您不需要使用窃听。只有 seda-queues 可以工作。

    Wiretap 模式应该用于您想要拦截组件之间的消息以进行分析或调试的地方。

    【讨论】:

    • EIP 页面讨论了我的确切用例,我想将消息用于监控目的。我的问题更多是在技术方面:是否有必要使用 WireTap 将消息发送到第二个通道,而对主要路由的执行影响最小?还是 SEDA 一样快?我想我必须对这两种变体进行更多的负载测试。
    • 是的,您应该使用替代渠道,以尽量减少对主要路线的影响。或者,探索使用 JMS 队列或将消息持久化到文件系统而不是使用 seda 的选项。由于前者应确保消息是持久的。
    【解决方案2】:

    Wiretap 和 SEDA 之间的一个重要区别是,当从轮询消费者(例如 fileftp)消费时,只有 wiretap 是即发即弃的。

    当来自轮询消费者的线程到达.to(seda:xx) 时,它将移交交换并按预期继续路由或从端点消费新的交换。 传递到 seda 端点的交换将由 seda 线程而不是原始消费者线程提交给原始消费者。这意味着,例如,如果您在轮询消费者端点定义中有 delete=true,则在 seda 线程完成之前不会删除该文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-31
      • 1970-01-01
      • 1970-01-01
      • 2021-09-21
      相关资源
      最近更新 更多