Camel支持一种更复杂的异步的处理模型,异步处理器实现一个继承自Processor接口的AsyncProcessor接口,使用异步Processor的优点:
a.异步Processor不会因等待阻塞调用而耗尽线程,这样在处理同样工作量的情况下,通过减少线程的数量可以增加系统的伸缩性
b.使用异步Processor,可以将路由分阶段处理,不同的线程池处理其相应的路由阶段,这就意味着路由可以并行处理。
缺点:实现异步的Processor要比同步的Processor复杂得多。
异步Processor与同步Processor的区别:
a.必须提供一个AsyncCallback对象,该对象在exchange处理完成后被通知
b.在异步Processor处理exchange的时候不能抛出任何异常,而应该将异常存储在exchange的Exception属性中
c.异步Processor必须知道它将以什么方式完成处理,异步或同步,如果process方法返回true,则是同步完成,如果process方法返回false,则是异步完成。
d.当处理器处理完exchange时,它必须调用callback.done(boolean sync)方法,sync参数必须与process方法的返回值一致。
对于一个路由来说,完全使用异步模式可以降低线程的使用量,这要求从Consumer开始就必须使用异步的处理API(即调用异步的
process方法),如果Consumer调用的是同步process()方法,那么消费者线程在处理Exchange时将被强制阻塞。
有一点必须注意的是当你调用了异步的API,
a.异步Processor不会因等待阻塞调用而耗尽线程,这样在处理同样工作量的情况下,通过减少线程的数量可以增加系统的伸缩性
b.使用异步Processor,可以将路由分阶段处理,不同的线程池处理其相应的路由阶段,这就意味着路由可以并行处理。
缺点:实现异步的Processor要比同步的Processor复杂得多。
异步Processor与同步Processor的区别:
a.必须提供一个AsyncCallback对象,该对象在exchange处理完成后被通知
b.在异步Processor处理exchange的时候不能抛出任何异常,而应该将异常存储在exchange的Exception属性中
c.异步Processor必须知道它将以什么方式完成处理,异步或同步,如果process方法返回true,则是同步完成,如果process方法返回false,则是异步完成。
d.当处理器处理完exchange时,它必须调用callback.done(boolean sync)方法,sync参数必须与process方法的返回值一致。
对于一个路由来说,完全使用异步模式可以降低线程的使用量,这要求从Consumer开始就必须使用异步的处理API(即调用异步的
process方法),如果Consumer调用的是同步process()方法,那么消费者线程在处理Exchange时将被强制阻塞。
有一点必须注意的是当你调用了异步的API,