我曾与seda合作并直接和我一起阅读文档.仍然无法想象seda的使用和直接.vm对我来说是新的.请用一个例子解释一下.
Kev*_*one 19
至少有四种不同的机制,一种Camel路由可以直接将数据传递给另一种."直接"是指不使用网络或某种形式的中间存储(文件,数据库).可以根据它们是否可以在CamelContext实例之间传递数据以及它们是同步还是异步来对这些机制进行分组.
直接和直接VM机制是同步的,因为生成端点阻塞直到消耗端点以及其路由逻辑的所有其余部分完成.SEDA和VM机制都使用消费者上的线程池,这样生产者发出的每个请求都被分配给池中的一个线程.这允许消费者端点及其相关的路由逻辑独立于生产者行动.
在不同Camel上下文之间进行通信的情况下,两个VM端点都是必需的.在许多情况下,可以将路由组合到相同的CamelContext中.但是,出于模块化或不可能的原因,它有时可能是不可取的,因为某些应用程序框架就是如此.例如,我可能在库(或组件)中实现一些Camel路由逻辑,目的是让库被其他代码使用.为了完整,这个库可能会定义一个包含各种路由的自包含CamelContext.如果我想调用库中的Camel逻辑,我将需要使用VM或Direct-VM,因为直接和SEDA端点不包含在Camel上下文之间路由所需的逻辑.
direct:和seda:组件之间的区别在于,第一个组件是同步的,第二个组件是异步的,带有一个队列。
实际的区别在于,对于发送同步消息,您必须等待路由完成,而对于异步消息,其“即发即弃”-您将它们放在队列中并假定使用者将对其进行处理。您也可以有多个使用者(并行化)。
最后一个示例vm:也是异步的,但是它也可以在同一JVM中的不同骆驼上下文中调用路由。想象一下,应用程序1具有骆驼上下文,而应用程序2具有骆驼上下文,这样它们就可以彼此通信。
编辑:
关于“什么时候使用”:
direct:在骆驼背景下端点之间的正常通话seda:时,你需要的并行计算或队列,但不想使用jms:vm:在应用程序之间调用时使用。当然,还有许多其他用例,但都是常见的用例(根据我自己的经验)
| 归档时间: |
|
| 查看次数: |
4206 次 |
| 最近记录: |