Versions Compared

Key

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

Throttler

The Throttler Pattern allows you to ensure that a specific endpoint does not get overloaded, or that we don't exceed an agreed SLA with some external service.

Options

Wiki Markup
Wiki Markup
h3. Throttler

The Throttler Pattern allows you to ensure that a specific endpoint does not get overloaded, or that we don't exceed an agreed SLA with some external service.

h3. Options

{div:class=confluenceTableSmall}
|| Name || Default Value || Description ||
| {{maximumRequestsPerPeriod}} | | Maximum number of requests per period to throttle. This option must be provided as a positive number. Notice, in the XML DSL, from *Camel 2.8* onwards this option is configured using an [Expression] instead of an attribute. |
| {{timePeriodMillis}} | {{1000}} | The time period in milliseconds, in which the throttler will allow at most {{maximumRequestsPerPeriod}} number of messages. |
| {{asyncDelayed}} | {{false}} | *Camel 2.4:* If enabled then any messages which is delayed happens asynchronously using a scheduled thread pool. |
| {{executorServiceRef}} | |  *Camel 2.4:* Refers to a custom [Thread Pool|Threading Model] to be used if {{asyncDelay}} has been enabled. |
| {{callerRunsWhenRejected}} | {{true}} | *Camel 2.4:* Is used if {{asyncDelayed}} was enabled. This controls if the caller thread should execute the task if the thread pool rejected the task. |
{div}

h3. Examples

*Using the [Fluent Builders]*

Examples

Using the Fluent Builders

Wiki Markup
{snippet:id=ex|lang=java|url=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ThrottlerTest.java}

So

...

the

...

above

...

example

...

will

...

throttle

...

messages

...

all

...

messages

...

received

...

on

...

seda:a

...

before

...

being

...

sent

...

to

...

mock:result

...

ensuring

...

that

...

a

...

maximum

...

of

...

3

...

messages

...

are

...

sent

...

in

...

any

...

10

...

second

...

window.

...

Note

...

that

...

since

...

timePeriodMillis

...

defaults

...

to

...

1000

...

milliseconds,

...

just

...

setting

...

the

...

maximumRequestsPerPeriod

...

has

...

the

...

effect

...

of

...

setting

...

the

...

maximum

...

number

...

of

...

requests

...

per

...

second.

...

So

...

to

...

throttle

...

requests

...

at

...

100

...

requests

...

per

...

second

...

between

...

two

...

endpoints,

...

it

...

would

...

look

...

more

...

like

...

this...

{
Code Block
}
from("seda:a").throttle(100).to("seda:b");
{code}

For

...

further

...

examples

...

of

...

this

...

pattern

...

in

...

use

...

you

...

could

...

look

...

at

...

the

...

junit

...

test

...

case

Using the Spring XML Extensions

Camel 2.7.x

...

or older

Wiki Markup
 older
{snippet:id=example|lang=xml|url=camel/tags/camel-2.7.0/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/throttler.xml}

h4. 

Camel

...

2.8

...

onwards

...

In

...

Camel

...

2.8

...

onwards

...

you

...

must

...

set

...

the

...

maximum

...

period

...

as

...

an

...

Expression

...

as

...

shown

...

below

...

where

...

we

...

use

...

a

...

Constant

...

expression:

Wiki Markup

{snippet:id=example|lang=xml|url=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/throttler.xml}

h3. 

Dynamically

...

changing

...

maximum

...

requests

...

per

...

period

...

Available

...

as

...

of

...

Camel

...

2.8

...


Since

...

we

...

use

...

an

...

Expression

...

you

...

can

...

adjust

...

this

...

value

...

at

...

runtime,

...

for

...

example

...

you

...

can

...

provide

...

a

...

header

...

with

...

the

...

value.

...

At

...

runtime

...

Camel

...

evaluates

...

the

...

expression

...

and

...

converts

...

the

...

result

...

to

...

a

...

java.lang.Long

...

type.

...

In

...

the

...

example

...

below

...

we

...

use

...

a

...

header

...

from

...

the

...

message

...

to

...

determine

...

the

...

maximum

...

requests

...

per

...

period.

...

If

...

the

...

header

...

is

...

absent,

...

then

...

the

...

Throttler

...

uses

...

the

...

old

...

value.

...

So

...

that

...

allows

...

you

...

to

...

only

...

provide

...

a

...

header

...

if

...

the

...

value

...

is

...

to

...

be

...

changed:

Wiki Markup

{snippet:id=e2|lang=xml|url=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/throttler.xml}

h3. 

Asynchronous

...

delaying

...

Available

...

as

...

of

...

Camel

...

2.4

...

You

...

can

...

let

...

the

...

Throttler

...

use

...

non

...

blocking

...

asynchronous

...

delaying,

...

which

...

means

...

Camel

...

will

...

use

...

a

...

scheduler

...

to

...

schedule

...

a

...

task

...

to

...

be

...

executed

...

in

...

the

...

future.

...

The

...

task

...

will

...

then

...

continue

...

routing.

...

This

...

allows

...

the

...

caller

...

thread

...

to

...

not

...

block

...

and

...

be

...

able

...

to

...

service

...

other

...

messages,

...

etc.

{
Code Block
}
from("seda:a").throttle(100).asyncDelayed().to("seda:b");
{code}

{include:Using This Pattern}
Include Page
Using This Pattern
Using This Pattern