[
https://issues.apache.org/jira/browse/CAMEL-9355?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15055642#comment-15055642
]
Claus Ibsen commented on CAMEL-9355:
------------------------------------
Thanks for the work.
> Current Throttler implementation is not accurate and does not work in a
> multi-threaded route
> --------------------------------------------------------------------------------------------
>
> Key: CAMEL-9355
> URL: https://issues.apache.org/jira/browse/CAMEL-9355
> Project: Camel
> Issue Type: Improvement
> Components: camel-core, eip
> Affects Versions: 2.16.0
> Reporter: Aaron Whiteside
> Assignee: Claus Ibsen
> Fix For: 2.17.0
>
> Attachments: CAMEL_9355.patch, CAMEL_9355v2.patch, CAMEL_9355v3.patch
>
>
> Current Throttler implementation is not accurate and is even more inaccurate
> in a multi-threaded route (think sjms....consumerCount=100).
> The delay to sleep cannot be calculated ahead of time in a multi-threaded
> environment, to this end the Throttler should not extend
> DelayProcessorSupport.
> Attached is a patch that changes throttler to use a Semaphore to do accurate
> and multi-thread safe throttling.
> The code I think is much cleaner, smaller and easier to understand. Than it
> used to be before.
> Unit tests still pass, I had to make some changes to ThrottlerTest as it made
> assumptions about the implementation and was doing bad things like adding a
> 750ms buffer to validating the minimum throttle delay.. ThrottlerTest is now
> very sane.
> I've also implemented support to allow the throttler construct to be used
> without any nested outputs. For example the follow code is now valid.
> {code}
> <throttle><constant>100</constant></throttle>
> {code}
> If you want to disable this feature it can be done in
> ThrottlerDefinition::createProcessor() line 82 changing false to true.
> I think this allows more flexible usage of the throttler, in my use case I
> want to delay the further execution of the route, and I don't want to have to
> split my routes up into separate sub-routes to be able to do that.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)