天天看點

解決分布式服務技術方案----單點故障及負載均衡處理

spring有比較好的遠端服務解決方案,但其靜态導入方案,隻能使用一個server端,在大型分布式系統中無法很好的解決負載均衡及單點故障問題。某一個server放生故障,client就會受到影響。

    為解決該問題,cluster4spring應運而生,提供一個很好的解決方案。一個client端可以同時連結n個服務節點,其中某一個服務節點發生故障不會影響整個系統運作。

    目前0.85版本,僅支援rmi遠端協定,後續預計會繼續支援很多其他協定。

使用很簡單,隻需xml配置即可:

Client端配置:

<bean name="REMOTE_SERVICE_CLIENT" class="org.softamis.cluster4spring.rmi.RmiUrlListProxyFactoryBean"
        abstract="true">
    <property name="refreshEndpointsOnConnectFailure" value="true"/>
    <property name="refreshEndpointsOnStartup" value="true"/>
    <property name="registerTraceInterceptor" value="true"/>
    <property name="switchEndpointOnFailure" value="true"/>
    <property name="interceptorNames" value="_TestClientLoggingInterceptor, _TestClientEmptyInterceptor"/>
    <property name="endpointFactory" ref="_RmiEndpointFactory"/>
    <property name="endpointSelectionPolicy" ref="_endpointSelectionPolicy"/>
  </bean>
<bean name="TestService1" parent="REMOTE_SERVICE_CLIENT">
    <property name="serviceInterface"              value="org.softamis.cluster4spring.examples.TestServiceImpl"/>
    <property name="serviceURLs">
      <list>
        <value>rmi://server1:1199/TestService</value>
        <value>rmi://server2:1199/TestService</value>
        <value>rmi://server3:1199/TestService</value>
      </list>
    </property>
  </bean>
Server端:
<bean id="_RMIRegistry" class="org.springframework.remoting.rmi.RmiRegistryFactoryBean">
    <property name="port" value="1099"/>
  </bean>

  <bean name="_RemoteInvcationExecutor" class="org.springframework.remoting.support.DefaultRemoteInvocationExecutor"/>
  <bean name="_RMIClientSocketsFactory" class="java.rmi.server.RMIClientSocketFactory"/>
  <bean name="TestService.bean" class="org.softamis.cluster4spring.examples.TestServiceImpl"/>

  <bean name="TestService.custom.verbose" class="org.springframework.remoting.rmi.RmiServiceExporter">
    <property name="clientSocketFactory" ref="_RMIClientSocketsFactory"/>
    <property name="registerTraceInterceptor" value="true"/>
    <property name="registry" ref="_RMIRegistry"/>
    <property name="remoteInvocationExecutor" ref="_RemoteInvocationExecutor"/>
    <property name="service" ref="TestService.bean"/>
    <property name="serviceInterface" value="org.softamis.cluster4spring.examples.TestServiceImpl"/>
    <property name="serviceName" value="TestService"/>
  </bean>
           

Server端可以直接使用spring預設配置,或者使用上述方案,cluster4spring會自動判斷處理。

具體的參數會在稍後給出,或請參考官網http://www.soft-amis.com/index.html