Table of Contents
The Kestrel component allows messages to be sent to a Kestrel queue, or messages to be consumed from a Kestrel queue. This component uses the spymemcached client for memcached protocol communication with Kestrel servers.
![]() | Warning |
|---|---|
The kestrel project is inactive and the Camel team regard this components as deprecated. |
kestrel://[addresslist/]queuename[?options]
Where queuename is the name of the queue on Kestrel. The addresslist
part of the URI may include one or more host:port pairs. For example,
to connect to the queue foo on kserver01:22133, use:
kestrel://kserver01:22133/foo
If the addresslist is omitted, localhost:22133 is assumed, i.e.:
kestrel://foo
Likewise, if a port is omitted from a host:port pair in addresslist,
the default port 22133 is assumed, i.e.:
kestrel://kserver01/foo
Here is an example of a Kestrel endpoint URI used for producing to a clustered queue:
kestrel://kserver01:22133,kserver02:22133,kserver03:22133/massive
Here is an example of a Kestrel endpoint URI used for consuming concurrently from a queue:
kestrel://kserver03:22133/massive?concurrentConsumers=25&waitTimeMs=500
The Kestrel component supports 1 options which are listed below.
{% raw %}
| Name | Java Type | Description |
|---|---|---|
configuration |
| To use a shared configured configuration as base for creating new endpoints. |
{% endraw %}
The Kestrel component supports 8 endpoint options which are listed below:
{% raw %}
| Name | Group | Default | Java Type | Description |
|---|---|---|---|---|
addresses | common |
|
| The address(es) on which kestrel is running |
queue | common |
| Required The queue we are polling | |
concurrentConsumers | common |
|
| How many concurrent listeners to schedule for the thread pool |
waitTimeMs | common |
|
| How long a given wait should block (server side) in milliseconds |
bridgeErrorHandler | consumer |
|
| Allows for bridging the consumer to the Camel routing Error Handler which mean any exceptions occurred while the consumer is trying to pickup incoming messages or the likes will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions that will be logged at WARN/ERROR level and ignored. |
exceptionHandler | consumer (advanced) |
| To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored. | |
exchangePattern | consumer (advanced) |
| Sets the exchange pattern when the consumer creates an exchange. | |
synchronous | advanced |
|
| Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported). |
{% endraw %}
The simplest form of explicit configuration is as follows:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd"> <bean id="kestrel" class="org.apache.camel.component.kestrel.KestrelComponent"/> <camelContext xmlns="http://camel.apache.org/schema/spring"> </camelContext> </beans>
That will enable the Kestrel component with all default settings, i.e.
it will use localhost:22133, 100ms wait time, and a single
non-concurrent consumer by default.
To use specific options in the base configuration (which supplies
configuration to endpoints whose ?properties are not specified), you
can set up a KestrelConfiguration POJO as follows:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd"> <bean id="kestrelConfiguration" class="org.apache.camel.component.kestrel.KestrelConfiguration"> <property name="addresses" value="kestrel01:22133"/> <property name="waitTimeMs" value="100"/> <property name="concurrentConsumers" value="1"/> </bean> <bean id="kestrel" class="org.apache.camel.component.kestrel.KestrelComponent"> <property name="configuration" ref="kestrelConfiguration"/> </bean> <camelContext xmlns="http://camel.apache.org/schema/spring"> </camelContext> </beans>
from("kestrel://kserver02:22133/massive?concurrentConsumers=10&waitTimeMs=500")
.bean("myConsumer", "onMessage");public class MyConsumer {
public void onMessage(String message) {
...
}
}public class MyProducer {
@EndpointInject(uri = "kestrel://kserver01:22133,kserver02:22133/myqueue")
ProducerTemplate producerTemplate;
public void produceSomething() {
producerTemplate.sendBody("Hello, world.");
}
}<camelContext xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="kestrel://ks01:22133/sequential?concurrentConsumers=1&waitTimeMs=500"/> <bean ref="myBean" method="onMessage"/> </route> <route> <from uri="direct:start"/> <to uri="kestrel://ks02:22133/stuff"/> </route> </camelContext>
public class MyBean {
public void onMessage(String message) {
...
}
}Table of Contents
The Kestrel component has the following dependencies:
spymemcached 2.5 (or greater)You must have the spymemcached jar on your classpath. Here is a
snippet you can use in your pom.xml:
<dependency>
<groupId>spy</groupId>
<artifactId>memcached</artifactId>
<version>2.5</version>
</dependency>Alternatively, you can download the jar directly.
Warning: Limitations
![]() | Note |
|---|---|
The spymemcached client library does not work properly with
kestrel when JVM assertions are enabled. There is a known issue with
spymemcached when assertions are enabled and a requested key contains
the |