...
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. |
URI format
Code Block |
---|
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:
Code Block |
---|
kestrel://kserver01:22133/foo
|
If the addresslist is omitted, localhost:22133
is assumed, i.e.:
Likewise, if a port is omitted from a host:port
pair in addresslist, the default port 22133 is assumed, i.e.:
Code Block |
---|
kestrel://kserver01/foo
|
Here is an example of a Kestrel endpoint URI used for producing to a clustered queue:
Code Block |
---|
kestrel://kserver01:22133,kserver02:22133,kserver03:22133/massive
|
Here is an example of a Kestrel endpoint URI used for consuming concurrently from a queue:
Code Block |
---|
kestrel://kserver03:22133/massive?concurrentConsumers=25&waitTimeMs=500
|
...
The simplest form of explicit configuration is as follows:
Code Block |
---|
|
<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>
|
...
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:
Code Block |
---|
|
<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>
|
...
Example 1: Consuming
Code Block |
---|
from("kestrel://kserver02:22133/massive?concurrentConsumers=10&waitTimeMs=500")
.bean("myConsumer", "onMessage");
|
Code Block |
---|
public class MyConsumer {
public void onMessage(String message) {
...
}
}
|
Example 2: Producing
Code Block |
---|
public class MyProducer {
@EndpointInject(uri = "kestrel://kserver01:22133,kserver02:22133/myqueue")
ProducerTemplate producerTemplate;
public void produceSomething() {
producerTemplate.sendBody("Hello, world.");
}
}
|
Example 3: Spring XML Configuration
Code Block |
---|
|
<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>
|
Code Block |
---|
public class MyBean {
public void onMessage(String message) {
...
}
}
|
...
You must have the spymemcached
jar on your classpath. Here is a snippet you can use in your pom.xml:
Code Block |
---|
<dependency>
<groupId>spy</groupId>
<artifactId>memcached</artifactId>
<version>2.5</version>
</dependency>
|
...
Warning |
---|
|
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 /t=... extension (i.e. if you're using the waitTimeMs option on an endpoint URI, which is highly encouraged). Fortunately, JVM assertions are disabled by default, unless you explicitly enable them, so this should not present a problem under normal circumstances. Something to note is that Maven's Surefire test plugin enables assertions. If you're using this component in a Maven test environment, you may need to set enableAssertions to false . Please refer to the surefire:test reference for details. |
Include Page |
---|
| Endpoint See Also |
---|
| Endpoint See Also |
---|
|