现象
代码处理的流程:public class EnsureTradeMsgAction implements Runnable{
private OrderMessage message;
public void run(){
id=message.getId();
model=orderService.getOrder(id);//远程调用
model.setMemberId(message.getMemberId());
model.setName(message.getName());
save(model);//保存数据库
}
}
过来两条消息:
{id:1,memberId:"a",name:"a"}
{id:2,memberId;"b",name:"bb"}
最后到数据库里面的两条数据是:
id memberId name
1 b bb
2 b bb
推理
通过现象可以看出来,第一条消息的部分数据被第二条消息给覆盖掉了。分析代码推断出流程是这个样子的:
1. 接收到第一条消息
2. 取出id,执行远程调用(这个时候接收到第二条消息,覆盖了message变量)