为何分布式事务喜欢用消息队列实现?直接rpc或者http不行吗?消息队列方式发起方不知道被动方处理结果,还要被动方通知,rpc/http方式实时知道处理结果,省去被动方通知
如果不是为了高并发削峰,直接rpc或者http是不是更好?
rpc/http分布式事务思想
{
transaction.start();
doSomeWriteInDB();
insert(OperationMessage, Status.PENDING);
transaction.commit();
try{
boolean isSuccess = doRemoteRPCCall();
} catch(Exception e) {
return;
}
if(isSuccess)update(OperationMessage, Status.FINISHED);
}
然后开定时任务查询PENDING的OperationMessage,重新执行doRemoteRPCCall();
解耦。
现在有 Service A / Service B,三者构成某分布式事务。
如果用 rpc,A / B 彼此是不是得知道对方(哪怕用注册中心不也有个调用过程)?用消息队列的话,彼此压根不需要知道对方,只需要跟消息队列打交道就可以了。
你硬要用 rpc 也行,那这时候又多俩 Service C / Service D 出来呢?你回过头还得去改 A / B 的代码吗?都你自己写的你说你费点儿劲,那也行;如果是两个不同 Team 在干活呢?人家凭啥加班帮你改,自己的任务不做了吗?