0

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

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

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

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

提出一些解决方案

4

2 回答 2

1
  1. 确保使用正确的锁定策略(请参阅表级锁定和行级锁定)
  2. 看看您是否可以一次处理一条消息,(JMS 消费者配置)这样,第一条消息将释放第二条消息的锁,依此类推

编辑:错字和链接

于 2013-09-14T16:44:04.367 回答
0

如果我理解正确,数据库处理是在将消息从队列中取出的侦听器中。

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

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

于 2013-09-04T13:24:45.973 回答