2011-05-27 100 views
1

我有一个方法在锁定(ReentrantLock)这种方法发送一些消息到服务器,立即接收响应和创建/保存数据库中的数据。 此响应具有发送消息的标识。客户端有一个正在等待服务器报告的侦听器(这个报告可以在数据发送到服务器之后返回),服务器也可以返回某种报告(带有id和一些状态),并且我需要将该报告(通过id)映射到该记录的先前保存的记录和更改状态字段。不同线程之间的数据共享

问题是这个报告可以更快地返回(并且侦听器会抓住它并尝试处理),那么来自第一个方法的消息被保存在数据库中。 解决这个问题的方法是什么?

我曾想过在数据库中创建附加表并将消息中的数据保存在一个表中,并将数据从报告保存到其他表中。然后通过其他进程同步它们,但是也许可以创建一些缓冲区/队列,其中消息ID将从第一个方法存储,并且当我们接收到报告时,我们将检查该缓冲区/队列是否存在相应的消息ID,如果我们发现该消息编号,那么报告监听器将继续它的工作?

回答

3

我认为最好将报告和消息分开存储在数据库中,并在稍后将其链接起来。假设你的数据库做了它的工作,这减少了数据丢失的可能性。另外,你让数据库完成锁定/同步的艰巨任务,通常他们在这方面非常擅长。

0

我会将数据存储在数据库中,当您想要发送消息到另一个系统来读取数据时,请使用JMS发送消息。这样,您可以确保当第二个系统收到消息时所有数据都可用。第二个系统只需要收听消息。