You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Glenn Puckett <gp...@savi.com> on 2016/12/21 21:30:10 UTC
Cancelling messages
My user has a UI that shows all messages that have been processed by or are
currently being processed by the Camel API. During the time a message is in
process they want to be able to cancel the message. In the application I
have code in a rest service that is called by the UI. It contains:
public void cancelExchange(String exchangeId) {
synchronized (this.camelContext) {
// Get a list of all in flight exchanges with the passed in
exchangeId
final List<Exchange> exchanges =
this.camelContext.getInflightRepository().browse().stream().filter(inflightExchange
-> inflightExchange.getExchange().getExchangeId().equals(exchangeId))
.map(InflightRepository.InflightExchange::getExchange).collect(Collectors.toList());
// Remove any active exchanges from Camel
for (final Exchange exchange : exchanges) {
this.log.debug("Removing exchange {}",
exchange.getExchangeId());
this.camelContext.getInflightRepository().remove(exchange);
// Set the ROUTE_STOP property so Camel will try to stop the
Exchange on the next
// retry
exchange.setProperty(Exchange.ROUTE_STOP, Boolean.TRUE);
}
}
This is not working. I identified an endpoint that is refusing connections.
It goes through the re-delivery tries and eventually fails. What do I need
to do to tell Camel to drop that message?
--
View this message in context: http://camel.465427.n5.nabble.com/Cancelling-messages-tp5791836.html
Sent from the Camel - Users mailing list archive at Nabble.com.
Re: Cancelling messages
Posted by Claus Ibsen <cl...@gmail.com>.
Try setting InterruptedException as exception on the cancelled
exchange as well, this should be detected by the redelivery error
handler and break out.
On Wed, Dec 21, 2016 at 10:30 PM, Glenn Puckett <gp...@savi.com> wrote:
> My user has a UI that shows all messages that have been processed by or are
> currently being processed by the Camel API. During the time a message is in
> process they want to be able to cancel the message. In the application I
> have code in a rest service that is called by the UI. It contains:
>
>
> public void cancelExchange(String exchangeId) {
> synchronized (this.camelContext) {
> // Get a list of all in flight exchanges with the passed in
> exchangeId
> final List<Exchange> exchanges =
> this.camelContext.getInflightRepository().browse().stream().filter(inflightExchange
> -> inflightExchange.getExchange().getExchangeId().equals(exchangeId))
>
> .map(InflightRepository.InflightExchange::getExchange).collect(Collectors.toList());
>
> // Remove any active exchanges from Camel
> for (final Exchange exchange : exchanges) {
> this.log.debug("Removing exchange {}",
> exchange.getExchangeId());
>
> this.camelContext.getInflightRepository().remove(exchange);
>
> // Set the ROUTE_STOP property so Camel will try to stop the
> Exchange on the next
> // retry
> exchange.setProperty(Exchange.ROUTE_STOP, Boolean.TRUE);
> }
> }
>
> This is not working. I identified an endpoint that is refusing connections.
> It goes through the re-delivery tries and eventually fails. What do I need
> to do to tell Camel to drop that message?
>
>
>
> --
> View this message in context: http://camel.465427.n5.nabble.com/Cancelling-messages-tp5791836.html
> Sent from the Camel - Users mailing list archive at Nabble.com.
--
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2: https://www.manning.com/ibsen2