You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Claus Ibsen (Jira)" <ji...@apache.org> on 2021/02/20 13:57:00 UTC

[jira] [Comment Edited] (CAMEL-16213) camel-core - Exchange pooling

    [ https://issues.apache.org/jira/browse/CAMEL-16213?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17287563#comment-17287563 ] 

Claus Ibsen edited comment on CAMEL-16213 at 2/20/21, 1:56 PM:
---------------------------------------------------------------

TODO: PooledExchange interface and move new api added to extended exchange to here
TODO: DefaultPooledExchange impl extending DefaultExchange and created by the factory
TODO: ExchangeFactory javadoc to highlight its for consumer only
TODO: statistics enabled off by default
TODO: configuration option in camel-main to turn this on|off
TODO: all components that has consumer to use the factory
TODO: add unit test in camel-core
TODO: capture metrics in pooled factory so we can gather how many exchanges are pooled (also jmx mbean)
TODO: recycle OUT when its DefaultMessage vs special implementation (check if any problems - eg camel-jms maybe?)
TODO: external pool with eviction (caffeine or the one luca mentioned?)



was (Author: davsclaus):
TODO: PooledExchange interface and move new api added to extended exchange to here
TODO: DefaultPooledExchange impl extending DefaultExchange and created by the factory
TODO: ExchangeFactory javadoc to highlight its for consumer only
TODO: statistics enabled off by default
TODO: configuration option in camel-main to turn this on|off
TODO: all components that has consumer to use the factory
TODO: add unit test in camel-core
TODO: capture metrics in pooled factory so we can gather how many exchanges are pooled (also jmx mbean)
TODO: recycle OUT when its DefaultMessage vs special implementation (check if any problems - eg camel-jms maybe?)


> camel-core - Exchange pooling
> -----------------------------
>
>                 Key: CAMEL-16213
>                 URL: https://issues.apache.org/jira/browse/CAMEL-16213
>             Project: Camel
>          Issue Type: New Feature
>          Components: came-core
>            Reporter: Luca Burgazzoli
>            Assignee: Claus Ibsen
>            Priority: Major
>             Fix For: 3.9.0
>
>
> By default a brand new exchange is created for each message received by a component and that's usually fine but for very simple routes, like those created by the camel-kafka-connector or the Kantive Sources in camel-k it may be useful to have an option to create pools of reusable exchanges as:
> - exchanges are short living objects and routes are simple 
> - exchanges are heavy (multiple maps for properties and headers)
> - camel-kafka-connector and knative sources are likely to receive the same messages type, with the same set of headers so the maps allocated by the exchange can safely be recycled to reduce allocations and resizing
> In addition to the reason above, we can leverages exchange pooling to:
> - implement back pressure driven by the resource constraints to be sure we don't exceed resources consumption and we don't degrade the the service (i.e. long GC pause) 
> - have a way to create tailored exchanges, i.e. by providing an exchange that does not have in/out but just in  
> An example of fast and efficient ASL2 licensed object pooling: https://github.com/chrisvest/stormpot



--
This message was sent by Atlassian Jira
(v8.3.4#803005)