读书人

spring 远路接口访问及集群方案(三)

发布时间: 2012-10-07 17:28:51 作者: rapoo

spring 远程接口访问及集群方案(三)

前两篇文章已经对spring rmi方式的远程接口调用进行了说明,在本文中,我主要对spring的集群进行总结和实践,主要使用的组件为cluster4spring

?

集群的目的主要是为了实现负载均衡和单点故障.

?

实际的例子如下:

?

1.从cluster4spring官方网站上下载其二进制softamis-cluster4spring-0.85.jar包文件,目前的版本为0.85,其下载网址为http://www.soft-amis.com或者http://sourceforge.net/projects/pscs/

2.从spring官方网站上下载其所需要的二进制jar包文件.

3.新建2个java项目,一个为server端, 一个为client端, 如spring 远程接口访问及集群方案(二)中的服务端和客户端代码一样.

4.新建一个客户端的配置文件client-cluster.xml,内容如下:

<?xml verson="1.0" encoding = "uft-8"?>

<!DCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">

<beans>

<bean name = "_RmiEndpointFactory" style="margin: 0cm 0cm 0pt;">?

<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="endpointFactory"?ref="_RmiEndpointFactory"/> ??

?<property?name="endpointSelectionPolicy">

?????? <bean style="margin: 0cm 0cm 0pt;"></property>

</bean> ??

<bean?name="helloWorldServiceProxy"?parent="REMOTE_SERVICE_CLIENT">??? <property?name="serviceInterface"??????????????value="demo.rmi.server.IHelloWorld"/> ??

????<property?name="serviceURLs"> ??

??????<list> ??

???<value>rmi://server1:1099/helloWorldService</value> ??

??<value>rmi://server2:1099/helloWorldService</value> ??

?<value>rmi://server3:1099/helloWorldService</value> ??

?</list> ??

</property> ??

??</bean>

?使用此配置文件来运行客户端,一般情况下会提示错误信息,如:RMI lookup for bean [contextService] with interface [my.own.Interface] failed ; nested exception is java.lang.ClassCastException: java.lang.String

?

如果出现此错误信息,则应修改上述文件中的serviceURLs属性的配置为:

<property name=”serviceURLs”>

<list>

<bean class=”org.softamis.cluster4spring.support.ServiceMoniker”>

<constructor-arg><value>rmi://localhost:1009/helloWorldService</value></constructor-arg>

</bean>

<bean class=”org.softamis.cluster4spring.support.ServiceMoniker”><constructor-arg><value>rmi://localhost: 1009/ helloWorldService </value></constructor-arg>

</bean>

<bean class=”org.softamis.cluster4spring.support.ServiceMoniker”>

<constructor-arg><value>rmi://localhost: 1009/ helloWorldService </value></constructor-arg>

</bean>

</list>

</property>

?

如果有任何问题可以留言与我交流,我也好学习学习。

注意:上面的项目中如果有错误信息,请检查所引用的包有没有问题,是不是少了spring.jar, aopalliance.jar,commons-logging.jar,log4j.jar等等

?

1 楼 meler 2011-12-05 有问题不理解:
<value>rmi://server1:1099/helloWorldService</value>
<value>rmi://server2:1099/helloWorldService</value>
<value>rmi://server3:1099/helloWorldService</value>
你的检测机制是怎么实现的?
如果server1崩溃, 应该有个机制去启用server2或者server3, 把server1挂起!

读书人网 >软件架构设计

热点推荐