markRollbackOnly() 在 Camel 2.0 中不起作用
markRollbackOnly() is not working in Camel 2.0
我有一个要求,我必须从服务器上删除文件,然后再从数据库中删除它。
我正在使用 apache camel 和 spring 启动。
我在 Apache Camel Route 中使用 transacted()
方法,但是如果 DB 有任何错误,markRollbackOnly()
方法会删除文件。
我的路线看起来像
from(RouterConstants.DIRECT_DELETE_FILE)
.onException(Exception.class)
.handled(true)
.setBody(simple(RouterConstants.EXCEPTION_PROPERTY))
.to(RouterConstants.BEAN_GLOBAL_EXCEPTION_HANDLER_METHOD_GENERIC_EXCEPTION_HANDLER)
.to(RouterConstants.ROUTE_WRITE_AS_JSON)
.setHeader(Exchange.HTTP_RESPONSE_CODE, constant(HttpStatus.SC_BAD_REQUEST))
.setHeader(Exchange.CONTENT_TYPE, constant(MediaType.APPLICATION_JSON_VALUE))
.markRollbackOnly()
.end()
.routeId("directRouteDeleteFileId")
.transacted()
//1. sftp delete
.to(RouterConstants.DIRECT_ROUTE_SFTP)
//2. db delete
.setBody(header("id"))
.convertBodyTo(Long.class).throwException(new RuntimeException())
.to(RouterConstants.ROUTE_DELETE_FILE_FROM_DB);
当我使用 rollback()
时,它确实停止从服务器删除文件,但它没有向最终用户提供正确的消息并抛出 org.apache.camel.RuntimeCamelException: org.apache.camel.RollbackExchangeException
知道如何解决这个问题吗?
我通过更改执行顺序让它工作。数据库删除与 markRollbackOnly() 方法配合使用效果很好。当使用 markRollbackOnly() 但数据库删除时,SFTP 不会回滚文件删除。
我有一个要求,我必须从服务器上删除文件,然后再从数据库中删除它。
我正在使用 apache camel 和 spring 启动。
我在 Apache Camel Route 中使用 transacted()
方法,但是如果 DB 有任何错误,markRollbackOnly()
方法会删除文件。
我的路线看起来像
from(RouterConstants.DIRECT_DELETE_FILE)
.onException(Exception.class)
.handled(true)
.setBody(simple(RouterConstants.EXCEPTION_PROPERTY))
.to(RouterConstants.BEAN_GLOBAL_EXCEPTION_HANDLER_METHOD_GENERIC_EXCEPTION_HANDLER)
.to(RouterConstants.ROUTE_WRITE_AS_JSON)
.setHeader(Exchange.HTTP_RESPONSE_CODE, constant(HttpStatus.SC_BAD_REQUEST))
.setHeader(Exchange.CONTENT_TYPE, constant(MediaType.APPLICATION_JSON_VALUE))
.markRollbackOnly()
.end()
.routeId("directRouteDeleteFileId")
.transacted()
//1. sftp delete
.to(RouterConstants.DIRECT_ROUTE_SFTP)
//2. db delete
.setBody(header("id"))
.convertBodyTo(Long.class).throwException(new RuntimeException())
.to(RouterConstants.ROUTE_DELETE_FILE_FROM_DB);
当我使用 rollback()
时,它确实停止从服务器删除文件,但它没有向最终用户提供正确的消息并抛出 org.apache.camel.RuntimeCamelException: org.apache.camel.RollbackExchangeException
知道如何解决这个问题吗?
我通过更改执行顺序让它工作。数据库删除与 markRollbackOnly() 方法配合使用效果很好。当使用 markRollbackOnly() 但数据库删除时,SFTP 不会回滚文件删除。