Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 4.0

...

Kestrel

...

Component

...

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.

...

URI

...

format

{
Code Block
}
kestrel://[addresslist/]queuename[?options]
{code}

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

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
 {{kserver01:22133}}, use:

{code}
kestrel://kserver01:22133/foo
{code}

If

...

the

...

addresslist

...

is

...

omitted,

...

localhost:22133

...

is

...

assumed,

...

i.e.:

{
Code Block
}
kestrel://foo
{code}

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
{code}

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
{code}

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
{code}

h3. Options

You can configure properties on each Kestrel endpoint

Options

You can configure properties on each Kestrel endpoint individually by specifying them in the ?parameters portion of the endpoint URI. Any ?parameters that are omitted will default to what is configured on the KestrelComponent's base KestrelConfiguration. The following properties may be set on KestrelConfiguration and/or each individual endpoint:

Wiki Markup
 individually by specifying them in the {{?parameters}} portion of the endpoint URI.  Any {{?parameters}} that are omitted will default to what is configured on the KestrelComponent's base KestrelConfiguration.  The following properties may be set on KestrelConfiguration and/or each individual endpoint:

{div:class=confluenceTableSmall}
|| Option || Default Value || Description ||
| {{concurrentConsumers}} | {{1}} | Specifies the number of concurrent consumer threads. |
| {{waitTimeMs}} | {{100}} | Specifies the {{/t=...}} wait time passed to Kestrel on GET requests. |
{div}

*

NOTE:

...

If

...

waitTimeMs

...

is

...

set

...

to

...

zero

...

(or

...

negative),

...

the

...

/t=...

...

specifier

...

does

...

not

...

get

...

passed

...

to

...

the

...

server

...

on

...

GET

...

requests.

...

When

...

a

...

queue

...

is

...

empty,

...

the

...

GET

...

call

...

returns

...

immediately

...

with

...

no

...

value.

...

In

...

order

...

to

...

prevent

...

"tight

...

looping"

...

in

...

the

...

polling

...

phase,

...

this

...

component

...

will

...

do

...

a

...

Thread.sleep(100)

...

whenever

...

nothing

...

is

...

returned

...

from

...

the

...

GET

...

request

...

(only

...

when

...

nothing

...

is

...

returned).

...

You

...

are

...

highly

...

encouraged

...

to

...

configure

...

a

...

positive

...

non-zero

...

value

...

for

...

waitTimeMs.

...

Configuring

...

the

...

Kestrel

...

component

...

using

...

Spring

...

XML

...

The

...

simplest

...

form

...

of

...

explicit

...

configuration

...

is

...

as

...

follows:

Code Block
xml
xml


{code:xml}
<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>
{code}

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:

Code Block
xml
xml


{code:xml}
<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>
{code}

h3. Usage Examples

h4. Example 1: Consuming

{code}

Usage Examples

Example 1: Consuming

Code Block
from("kestrel://kserver02:22133/massive?concurrentConsumers=10&waitTimeMs=500")
  .bean("myConsumer", "onMessage");
Code Block
{code}

{code}
public class MyConsumer {
    public void onMessage(String message) {
        ...
    }
}
{code}

h4. Example 

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.");
    }
}
{code}

h4. Example 

Example 3:

...

Spring

...

XML

...

Configuration

Code Block
xml
xml


{code:xml}
  <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
{code}

{code}
public class MyBean {
    public void onMessage(String message) {
        ...
    }
}
{code}

h3. Dependencies

The Kestrel component has the following dependencies:
- {{spymemcached}} 2.5 (or greater)

h4. spymemcached
You *must* have the {{spymemcached}} jar on your classpath.  Here is a snippet you can use in your pom.xml:
{code

Dependencies

The Kestrel component has the following dependencies:

  • spymemcached 2.5 (or greater)

spymemcached

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>
{code}

Alternatively,

...

you

...

can

...

download

...

the

...

jar directly.

Warning
titleLimitations
|http://code.google.com/p/spymemcached/downloads/list] directly. {warning:title=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 {{

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

|http://download.oracle.com/javase/1.4.2/docs/guide/lang/assert.html]

,

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

|http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html]

for

details.

{warning} {include:Endpoint See Also}

Include Page
Endpoint See Also
Endpoint See Also