title: Camel Idempotent removeOnFailure for some exception types only
body: <p>Considering this simple Camel route:</p>
  
  <pre><code>from("timer:some timer")
      .bean(someBeanThatProducesLists)
      .split(body()).parallelProcessing()                    . 
          .idempotentConsumer(simple("${body.id}"), myIdempotentRepository)
              .bean(beamThatProcesses)
  </code></pre>
  
  <p>This is working as expected. When an exception occurs in <code>beamThatProcesses</code> the key is removed and is re-processed if <code>someBeanThatProducesLists</code> returns an entry with the same ID again. 
  What I would like is to have </p>
  
  <pre><code>onException(MyCustomException.class)
      .maximumRedeliveries(3)
  </code></pre>
  
  <p>And keep the ID in the idempotent repository after the re-deliveries are exhausted, but only for this specific exception, so <code>removeOnFailure</code> doesn't really help here. </p>
  
  <p>I browsed through the documentation and also Camel In Action second edition v12, but could not find any way to implement this. I did find that marking exception <code>handled</code> does not help.</p>
  
  <p>I could set <code>removeOnFailure</code> to false, and then have custom exception handlers that remove it in most exceptions and keep it on custom when retries exhausted, but it's error prone as the idempotent key would have to be computed in multiple places, exceptions can occur anywhere in the route etc.</p>
  
  <p>I guess I could catch the exception in  <code>beamThatProcesses</code> and deal with it there, but I'm hoping there is a way to instruct camel to do it. </p>