Spring Remoting RMI,客户端故障转移到备用服务器

时间:2013-12-25 11:33:05

标签: spring rmi spring-remoting

环境:Spring Framework 3.2.3.RELEASE

是否有办法使用RmiProxyFactoryBean或其他任何其他直接弹簧上下文配置实现故障转移?

我有一个ServerA作为主要和& ServerB作为备用RMI服务器。如果与ServerA的连接断开,则应将RMI调用定向到ServerB。

1 个答案:

答案 0 :(得分:1)

我已覆盖refreshAndRetry& lookupStub的{​​{1}}方法可以实现此故障转移。

RMIProxyFactoryBean

配置XML:

@Override
    protected Object refreshAndRetry(MethodInvocation invocation)   throws Throwable {

        if (logger.isDebugEnabled()) {
            logger.debug("Refreshing & retrying remote invocation.");
        }

        swapHitURLs();//Swap primary<>secondary URL

        return super.refreshAndRetry(invocation);
    }

@Override
    protected Remote lookupStub() throws RemoteLookupFailureException {
        Remote stub=null;

        if (logger.isDebugEnabled()) {
            logger.debug("Looking up the stub.");
        }

        try{
            stub=super.lookupStub();
        }catch(RemoteLookupFailureException rlfx){
            swapHitURLs();//Swap primary<>secondary URL
            if (logger.isDebugEnabled()) {
                logger.debug("Looking up the stub for swapped URL.");
            }
            stub=super.lookupStub();
        }

        return stub;
    }

如果有更好的选择让我知道。