谁根据http发布请求/响应处理远程帐户系统的事务管理?

时间:2011-11-14 11:52:34

标签: java spring http distributed-transactions remote-server

我有一个使用自己的数据库的应用程序,并且还可以通过基于XML的http post请求/响应来使用远程会计系统。 我可以发布借记和信用http发送请求。

当一些用户玩游戏时,我必须用一些赌注来奖励他,如果他赢了,我必须从中扣除胜利金额。由于它的http协议我实现了一些超时重试功能,但我想问一下当http请求很好并且我得到了响应时如何处理这个案例,但在那之后我的方面失败了?它就像分布式交易案例,但不一样:(...

一些伪代码更清晰:

public void handlePlay(double stake, double winAmount, int playerId) {
    // post http stake request to remote account system
     stakePlayer(playerId, stake); // this method post http request and on fail throws exception
     int outcomeId;
    // persists game outcome with stake and winAmount in local database
     try {
       outcomeId = persistOutcome(stake, winAmount, playerId);// this is in separate transaction 
     } catch(Excetion e) {
        // send http post request to cancel stake request
        cancelStake(stake, playerId);
     }

     if (winAmount > 0.0) { // send win amount http request
        try {
          winPlayer(winAmount, playerId); // debits winamount remote account system
        } catch (Exception e) {
        // send http post request to cancel stake request
          cancelStake(stake, playerId);              
        // call method which deletes the outcome
          deleteOutcome(outcomeId);
          throw e;// finally this exception is thrown to the player
        }
     }
}

此代码中的问题是: 1)首先,如果persistOutcome(..)失败并且在catch子句中调用cancelStake,它可能无法发送取消请求(即使它具有重试算法)。 2)同样适用于第二个挡块。

请建议此类案例的最佳做法。

0 个答案:

没有答案