JMS多个消息锁定数据库表

时间:2013-09-04 13:18:19

标签: java queue jms

我正在使用一次接收多个XML文件的Web服务,其中包含学生的数据 我需要处理该文件并将值存储到数据库。

因为我使用了JMS队列。我正在创建对象消息并推送到队列。 但是当队列正在处理消息时,另一条消息可用于进程,并且由于我的数据库表被锁定。

考虑到我有一个包含5000个值的列表,并且在for循环中我正在迭代列表并处理JMS消息。

这正是我的情景。问题是在处理一条消息时,我的表被锁定,其余文件保持在队列中。

建议一些解决方案

2 个答案:

答案 0 :(得分:1)

  1. 确保使用正确的lock strategy(请参阅表级锁定和行级锁定)
  2. 看看你是否可以一次一个地处理你的消息,(JMS消费者配置)这样,第一条消息将释放第二条消息,依此类推
  3. 编辑:错字和链接

答案 1 :(得分:0)

如果我理解正确,那么数据库处理就在收听消息的侦听器中。

您必须担心数据库隔离和表/行锁定,因为每个侦听器都在自己的线程中运行。

您必须锁定行或将数据库上的ISOLATION级别设置为SERIALIZABLE,以保证一次只有一个线程可以INSERT或UPDATE表。