【问题标题】:JMS Queues: Re-inserting a message vs Rolling BackJMS 队列:重新插入消息与回滚
【发布时间】:2018-12-20 09:19:55
【问题描述】:

我有一个针对第三方服务处理事务的 JMS 使用者。

当调用此第三方服务时出现异常,例如 java.net.ConnectException。我希望队列重新发送此消息。

可以通过两种明显的方法进行重新交付。

  1. 回滚事务上下文:队列重新传递消息,但 JPA 事务被回滚(但是,我希望数据库有事务记录以防止重复消息(如果有)。

  2. 重新发送来自消费者的消息并带有重新传递时间:保留事务上下文(记录保存在数据库中)。

将消息从消费者重新发送到队列而不是不确认是否存在任何性能问题?

【问题讨论】:

  • 您需要用您的数据库实现某种“ReplayServer”。您不能重新请求并重新发送丢失的消息吗?

标签: java jpa jms message-queue spring-jms


【解决方案1】:

回滚更可靠。

您应该简单地为 DB 更新启动一个新事务,而不是将其与 JMS 事务同步,因此即使 JMS 事务回滚,DB 事务也会提交。

【讨论】:

  • 一个问题:我做了很多数据库保存,并且为每次更新创建一个新事务似乎会增加数据库连接池的负载,而不是让一个事务正常终止。
猜你喜欢
  • 2015-02-25
  • 1970-01-01
  • 2011-10-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-22
  • 2012-01-19
  • 1970-01-01
  • 2012-04-17
相关资源
最近更新 更多