Apache Camel 中的窃听和多播有什么区别

What is the difference bewteen wiretap and multicast in Apache Camel

Camel 中 wireTap 和多播的默认行为似乎很相似。那就是它们都有助于以不同的方式处理相同的消息。 那么wireTap和multicast的主要区别是什么?

Multicast : Multicast EIP允许并发发送同一条消息的副本给多个 收件人。

WireTap:Wire Tap(来自 EIP 模式)允许您在将消息转发到最终目的地时将消息路由到单独的位置。

我认为您无法通过使用 wireTap 向多个收件人并行发送消息来实现并发。

@Srikanth -

I don't think you can achieve concurrency by using wireTap

不太正确。 WireTap 以及具有并行处理的多播将具有并发性。

这是 WireTap 的主要用途。作为在主线程之外进行日志记录或审核的示例,不会减慢 non-functional 操作的主线程。

区别是:

  • WireTap 是 "one-way fork"。消息到达与主线程并行的不同线程中的 wire-tapped 端点,并且无法从它返回到主线程的响应。

    也可以发送到除主要 body、headers 等之外的 wire-tapped 端点

  • 使用多播可以在并行或顺序处理后"split-then-aggregate"在主线程中产生结果。

    也没有限制将多播的端点数量,而 WireTap 只能发送到一个端点。

wireTap 组件仅将消息发送到一个路由,而主流继续进行。

多播路由器通过多个路由发送消息,并等待所有路由继续,然后主流才能继续下一个消息处理器。

在旧的和弃用的多播路由器的情况下,这是同步发生的,这意味着主流必须等待所有路由执行时间的总和。

在 3.5 中,引入了一个名为的新多播路由器,它可以并行执行相同的操作,使主流成为最慢路由的唯一路径。