Asynchronous Routing Engine
Since Camel 2.4
As of Camel 2.4 the asynchronous routing engine is back and kicking.
All the Enterprise Integration Patterns
are supported as well a selected number of
Components:
-
AHC Camel 2.8: (only producer)
-
AWS Camel 2.11: (only consumer) for S3 and SNS.
-
Avro Camel 2.10: (only producer)
-
CXF Camel 2.5: (both consumer and producer)
-
CXFRS Camel 2.5: (only consumer)
-
Direct-VM Camel 2.10.5/2.11.0: (both consumer and producer)
-
File - (only consumer)
-
FTP - (only consumer)
-
Guava EventBus Camel 2.10: (only consumer)
-
JBI (both consumer and producer)
-
Jetty (both consumer and producer)
-
JGroups Camel 2.10: (only consumer)
-
JMS Camel 2.5: (only producer for Request Reply messaging over JMS). Camel 2.9: (consumer, if option
asyncConsumer=true
is used). -
JMS Camel 2.9: (also consumer)
-
NMR (both consumer and producer)
-
Netty only producer (Camel 2.10: also consumer)
-
SEDA (both consumer and producer) SEDA was mistakenly in this list until November 3rd 2012. As of Camel 2.10.x, it still does not leverage the Async Routing Engine, but support is planned for Camel 3.0.
-
Timer Camel 2.12: (only consumer)
When we say a component is supported, that means, the component is leveraging the asynchronous model. For example Jetty uses continuations and the async HTTP client to be fully asynchronous and non-blocked. That means no threads will ever be blocked while waiting for a reply.
In the future, additional Components will be supported as well where it’s applicable.
Forcing to use synchronous processing
You can configure the endpoints with the option synchronous=true
to
force using synchronous processing. For example when sending a web
service request using CXF, the caller will wait for the
reply if synchronous=true
was configured. Currently, this option is
supported by all the producers. If you don’t want to let the
CXF consumer leverage the CXF continuation API to use the
asynchronous processing, you can also use this option synchronous=true
to disable it. The JBI and NMR components
are always asynchronous and don’t support this option.