2013-12-25 4 views
2

Env: Spring Framework 3.2.3.RELEASESpring Remoting RMI, клиент переключение на резервный сервер

Есть ли способ добиться отказоустойчивости с RmiProxyFactoryBean или любой другой в прямой конфигурации вперед контекста весной?

У меня есть ServerA как первичный & ServerB как альтернативные серверы RMI. Если соединение с ServerA не работает, вызовы RMI должны быть направлены на ServerB.

ответ

1

Я переопределил refreshAndRetry & lookupStub метод RMIProxyFactoryBean, чтобы добиться этого переключения переключения после отказа.

@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; 
    } 

конфигурации XML:

<bean id="beanName" class="com.ahamed.poc.rmi.FailOverRMIProxyFactory" lazy-init="true"> 
    <property name="serviceUrl" value="PrimaryURL"/> 
    <property name="alternativeServiceUrl" value="SecondaryURL"/> 
    <property name="serviceInterface" value="com.ahamed.poc.rmi.InterfaceClass"/> 
</bean> 

Если какие-либо лучшие варианты, дайте мне знать.

Смежные вопросы