Spring Integration中的例外:如何记录但不截取

延斯·克罗格斯伯(Jens Krogsboell)

假设我有一个基本的Spring Integration流程,例如:

<jms:inbound-channel-adapter>
  <poller>
     <transactional/>
  </poller>
</jms:inbound-channel-adapter>

<some:outbound-channel-adapter/>

如果出站适配器抛出异常,则会回滚整个事务。

如果入站消息子系统支持该消息,则该消息将被重新发送多次,直到最终将其发布到“死信队列”中为止。很好-除了丢失异常本身之外,从诊断的角度来看,异常非常烦人。

如果我使用错误通道配置入站适配器,例如:

<jms:inbound-channel-adapter>
  <poller error-channel="myErrorChannel" >
     <transactional/>
  </poller>
</jms:inbound-channel-adapter>

<some:outbound-channel-adapter/>

那么该异常将被捕获,并成为myErrorChannel上消息有效负载的一部分。然后,我可以读取消息并将异常的堆栈跟踪记录保留到日志中以进行诊断-但要付出一定的代价-入站适配器上的事务不再回滚并且原始消息丢失了-除非我也保存了它作为错误处理的一部分。

但是,如果保留异常或原始消息也失败怎么办?我想如果myErrorChannel是直接通道,则整个事务将再次回滚,最终该消息最终将出现在Dead Letter Queue上。而且,堆栈跟踪将再次丢失。

处理这些问题的最佳实践是什么?

阿尔特姆·比兰(Artem Bilan)

实际上,您的做法正确,但是在将交易记录到您的帐户后,您必须手动回滚交易errorHandler

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

仅此而已:无需保留消息,也不必担心那里的其他副作用。

当然,您myErrorChannel必须是direct在同一个事务线程中进行日志记录和回滚的渠道。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Spring Integration中的例外:如何记录但不截取

来自分类Dev

如何配置Spring Integration?

来自分类Dev

在Spring Integration DSL中配置Spring事务

来自分类Dev

Spring Integration FTP低级日志记录

来自分类Dev

在Spring Integration中验证架构

来自分类Dev

Spring Integration DSL 中的路由

来自分类Dev

如何在Spring Integration路由器中忽略ChannelResolutionException?

来自分类Dev

我应该如何在Spring Integration中构建我的消息?

来自分类Dev

如何在Spring Integration中创建和保持多个连接

来自分类Dev

在Spring Integration中如何进行单元测试?

来自分类Dev

如何在Spring Integration中运行并行聚合器?

来自分类Dev

Spring Integration中如何处理嵌套事务异常

来自分类Dev

如何避免在Spring Integration中扫描或过滤特定目录?

来自分类Dev

如何在 Spring Integration 中为 JsonObjectMapper 设置日期格式

来自分类Dev

如何在 Spring Integration 中从 XML 检索数据

来自分类Dev

如何在 Spring Integration 中取消订阅文件频道?

来自分类Dev

如何在 spring-integration 中模拟 InboundAdapter?

来自分类Dev

在 Spring Boot 中记录 Hibernate

来自分类Dev

不使用 xml 文件的 Spring Integration 中的日志记录过程

来自分类Dev

如何使用Spring DSL在骆驼中记录标头值

来自分类Dev

Spring MVC如何记录BindingResult中的所有错误

来自分类Dev

Spring MVC如何记录BindingResult中的所有错误

来自分类Dev

如何使用angularjs请求删除spring mvc中的记录

来自分类Dev

如何在 Spring Boot 中启用文件日志记录?

来自分类Dev

在Spring Batch和Spring Integration中如何从itemWriter写入输出通道?

来自分类Dev

如何在Spring Batch和Spring Integration中从itemWriter写入输出通道?

来自分类Dev

Spring Integration http出站网关日志记录错误

来自分类Dev

带有敏感信息的Spring Integration日志记录

来自分类Dev

Spring Integration的异步发布-订阅如何工作?

Related 相关文章

  1. 1

    Spring Integration中的例外:如何记录但不截取

  2. 2

    如何配置Spring Integration?

  3. 3

    在Spring Integration DSL中配置Spring事务

  4. 4

    Spring Integration FTP低级日志记录

  5. 5

    在Spring Integration中验证架构

  6. 6

    Spring Integration DSL 中的路由

  7. 7

    如何在Spring Integration路由器中忽略ChannelResolutionException?

  8. 8

    我应该如何在Spring Integration中构建我的消息?

  9. 9

    如何在Spring Integration中创建和保持多个连接

  10. 10

    在Spring Integration中如何进行单元测试?

  11. 11

    如何在Spring Integration中运行并行聚合器?

  12. 12

    Spring Integration中如何处理嵌套事务异常

  13. 13

    如何避免在Spring Integration中扫描或过滤特定目录?

  14. 14

    如何在 Spring Integration 中为 JsonObjectMapper 设置日期格式

  15. 15

    如何在 Spring Integration 中从 XML 检索数据

  16. 16

    如何在 Spring Integration 中取消订阅文件频道?

  17. 17

    如何在 spring-integration 中模拟 InboundAdapter?

  18. 18

    在 Spring Boot 中记录 Hibernate

  19. 19

    不使用 xml 文件的 Spring Integration 中的日志记录过程

  20. 20

    如何使用Spring DSL在骆驼中记录标头值

  21. 21

    Spring MVC如何记录BindingResult中的所有错误

  22. 22

    Spring MVC如何记录BindingResult中的所有错误

  23. 23

    如何使用angularjs请求删除spring mvc中的记录

  24. 24

    如何在 Spring Boot 中启用文件日志记录?

  25. 25

    在Spring Batch和Spring Integration中如何从itemWriter写入输出通道?

  26. 26

    如何在Spring Batch和Spring Integration中从itemWriter写入输出通道?

  27. 27

    Spring Integration http出站网关日志记录错误

  28. 28

    带有敏感信息的Spring Integration日志记录

  29. 29

    Spring Integration的异步发布-订阅如何工作?

热门标签

归档