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