Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring integration 如何在spring集成中回滚从IBM MQ获取的消息_Spring Integration_Spring Jms - Fatal编程技术网

Spring integration 如何在spring集成中回滚从IBM MQ获取的消息

Spring integration 如何在spring集成中回滚从IBM MQ获取的消息,spring-integration,spring-jms,Spring Integration,Spring Jms,我有这样一个spring集成流: 1) message-driven-channel-adapter -> 1.1) output-channel connected to -> service-activator -> outbound-channel-adapter (for sending response) 1.2) error-channel connected to -> excep

我有这样一个spring集成流:

    1) message-driven-channel-adapter -> 
                 1.1) output-channel connected to -> service-activator -> outbound-channel-adapter (for sending response)
                 1.2) error-channel connected to -> exception-type-router 
                            1.2.1) message is sent to different queues depending on the exception type using outbound-channel-adapter
我已在消息驱动通道适配器中设置acknowledge=“Transact”。我想在错误通道之后为特定类型的异常引入回滚

首先,我尝试将异常类型路由器输出连接到ServiceActivator。但我有一个例外:

   Code: 

     <service-activator id="rollBackActivator" input-channel="RollBackChannel" 
             ref="errorTransformer" method="rollBackMessage"/>

     public void rollBackMessage(MessagingException  message){       
         TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
     System.out.println("Message rolled back:"+TransactionAspectSupport.currentTransactionStatus().isRollbackOnly());
 }

   Exception:
   org.springframework.messaging.MessageHandlingException: org.springframework.transaction.NoTransactionException: No transaction aspect-managed TransactionStatus in scope
代码:
公共无效回滚消息(MessaginException消息){
TransactionSpectSupport.currentTransactionStatus().setRollbackOnly();
System.out.println(“消息回滚:”+TransactionSpectSupport.currentTransactionStatus().isRollbackOnly());
}
例外情况:
org.springframework.messaging.MessageHandlingException:org.springframework.transaction.notTransactionException:范围内没有事务方面管理的事务状态
然后,我尝试使用出站通道适配器表达式,但再次出现另一个异常

Code:
<outbound-channel-adapter id="rollbackOut" channel="RollBackChannel" 
     expression="T(org.springframework.transaction.interceptor.TransactionAspectSupport).currentTransactionStatus().setRollbackOnly()"/>

 Exception:
 org.springframework.messaging.MessageHandlingException: Expression evaluation failed: T(org.springframework.transaction.interceptor.TransactionAspectSupport).currentTransactionStatus().setRollbackOnly()
代码:
例外情况:
org.springframework.messaging.MessageHandlingException:表达式计算失败:T(org.springframework.transaction.interceptor.TransactionSpectSupport).currentTransactionStatus().setRollbackOnly()

请建议在此场景中实施回滚。

默认情况下,容器在会话上使用本地事务。没有涉及AOP。只要抛出一个异常,容器就会回滚消息。

谢谢Gary。我可以通过抛出异常回滚消息。