anchor.diff:  include::partial$eip-options.adoc[]
   // eip options: END
   
  -== Samples
  +== Using Throttle
  +
  +The below 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 during a running 10-seconds window slot.
   
   [source,java]
   ----
   from("seda:a")
     .throttle(3).timePeriodMillis(10000)
  -  .to("log:result", "mock:result");
  +  .to("mock:result");
   ----
   
  -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...
  +To use 10-seconds window we set the `timePeriodMillis` to ten-thousand. The default value is 1000 (i.e. 1 second),
  +meaning that setting just `throttle(3)` has the effect of setting the maximum number of requests per second.
  +
  +To throttle by 50 requests per second, would look like this:
   
   [source,java]
   ----
   from("seda:a")
  -  .throttle(100)
  +  .throttle(50)
     .to("seda:b");
   ----
   
  -For further examples of this pattern in use you could look at the junit test case.
  +And the examples in XML:
   
  -And an example in XML
   [source,xml]
   ----
   <route>
     <from uri="seda:a"/>
  -  <!-- throttle 3 messages per 10 sec -->
     <throttle timePeriodMillis="10000">
       <constant>3</constant>
     </throttle>
  -  <to uri="log:result"/>
     <to uri="mock:result"/>
   </route>
   ----
   
  -== Dynamically changing maximum requests per period
  +And to throttle 50 message per second:
  +
  +[source,xml]
  +----
  +<route>
  +  <from uri="seda:a"/>
  +  <throttle>
  +    <constant>50</constant>
  +  </throttle>
  +  <to uri="mock:result"/>
  +</route>
  +----
  +
  +=== Dynamically changing maximum requests per period
  +
  +TODO: 
   
   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:
  +
   [source,xml]
   ----
   <route>
  
positive.code:   .throttle(100).asyncDelayed()
    .to("seda:b");
  ---------------------
  
negative.code: :since: 
  :supportlevel: Stable
  
  How can I throttle messages to ensure that a specific endpoint does not get overloaded, or we don’t exceed an agreed SLA with some external service?
  
  image::eip/MessagingAdapterIcon.gif[image]
  
  Use a Throttler that controls the rate how many or fast messages are flowing to the endpoint.
  
  == Options
  
  