1)场景:

 网站向消息平台发送消息,消息平台将其保单到数据库中;

 后台有多台服务器进行集群,这种情况下就会出现多线程同时获取到同一条消息进行处理的问题?如何解决:


2)具体方案,如下的sql即可解决。

   //定义一张qtz_locks表,用来做控制锁使用。

   //for update:代表给你查询出的记录添加锁

   //nowait: 代表如果获取不到数据不等待直接抛出异常退出

   select * from qrtz_locks_ex where lock_name='CALENDAR_ACCESS' and group_name='EPCISNBA'for update nowait;

   select * from proddata.marketproduct_info mi where mi.marketproduct_code='MP02000138'and mi.status='1';

    

   1)在你处理的代码中首先执行第一条sql,获取控制锁;然后再执行你的查询,进行状态的修改,处理完成后在释放控制锁;

   2)这样,在你进行操作前,都必须获取控制锁,才能继续操作,否则就中断,抛出异常。这样就可以做到同一条件记录只能被一条线程所操作。