Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin

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

...

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 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.

rejectExecution

false

Camel 2.14: If this option is true, throttler throws a ThrottlerRejectExecutionException when the request rate exceeds the limit.

Examples

Using the Fluent Builders

...

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...

...

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

...

...

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:

...

...

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:

...

...

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.

...

...

Using This Pattern