Claus Ibsen created CAMEL-26331:
-----------------------------------
Summary: camel-core - one hook for every send to an endpoint, that
can stop, delay or change the send
Key: CAMEL-26331
URL: https://issues.apache.org/jira/browse/CAMEL-26331
Project: Camel
Issue Type: Improvement
Components: camel-core
Reporter: Claus Ibsen
Fix For: 4.24.0
Every send to an endpoint in Camel goes through one of six places, the places
that fire the {{ExchangeSendingEvent}}:
* {{SendProcessor}} ({{to}})
* {{DefaultProducerCache}}, two places, and {{EventNotifierCallback}} ({{toD}},
enrich, routingSlip, ProducerTemplate)
* {{MulticastProcessor}} (recipientList)
* {{EventNotifierProducer}} (deferred producers)
No component fires the event itself. The six places repeat the same code: fire
the sending event, start a StopWatch, call the producer, fire the sent event.
*Proposal*
* Move this code into one helper that the six places call.
* Give the helper a hook (an SPI) that runs before and after the producer.
Before the send, the hook can stop it (it sets an exception, and the producer
is not called), delay it or change the message. After the send, it can change
the reply.
* With no hook installed, the cost is one check, like the event check that
these places do today.
* For a send from a route, the hook runs inside the error handler. So a stopped
send is a real failure for {{onException}}, redelivery and the dead letter
channel.
*Why not what exists today*
* An event notifier sees every send, but it cannot stop one: the exception of a
notifier is logged and ignored, and the producer is called anyway.
* interceptSendToEndpoint can stop a send, but it wraps the endpoints and adds
processors to the routes.
* Wrapping the component, as {{camel run --stub}} does, changes its type. A
{{KafkaComponent}} is then a wrapper for {{getComponent("kafka",
KafkaComponent.class)}}, the component options, the dev consoles and the health
checks.
*First user*
camel-chaos (CAMEL-26330): fail, delay or change any send while the application
runs, without changing the components or the routes. The hook is general, so
other developer tools can use it too.
_Filed by Claude Code on behalf of davsclaus_
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)