发表于: 2017-11-24 22:52:03
1 696
今天完成的事情
写了两个service,实现随机访问
服务端的设置基本相似,确保端口不同即可
在客户端spring配置文件中配置两个服务端的连接
<bean id="testclient" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
<property name="serviceUrl" value="rmi://47.94.209.218:9999/hei"/>
<property name="serviceInterface" value="com.jnshu.service.StudentWebService"/>
</bean>
<bean id="testclient2" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
<property name="serviceUrl" value="rmi://47.94.209.218:9000/hei2"/>
<property name="serviceInterface" value="com.jnshu.service.StudentWebService"/>
</bean>
为了实现随机访问sservice,可以取一个1~10的随机数,判断大于5时选择加载连接1,否则加载连接2,为了实现挂掉一台而不影响使用,还需要使用try/catch语句,之前的代码时直接将整个执行过程写在try/catch语句中,在套进if语句中,代码量增加为原来的4倍,而且全是重复代码,之后直接用了马正的方法,十分精妙,写一个初始化方法,在方法中写if和try/catch,用来选择加载的bean
@Autowired
ApplicationContext context;
StudentWebService studentWebService;
public void init(){
int a = (int) (Math.random()*10);
if (a<5){
try{
studentWebService = (StudentWebService) context.getBean("testclient");
studentWebService.list();
}catch (Exception e){
studentWebService = (StudentWebService) context.getBean("testclient2");
}
}else {
try{
studentWebService = (StudentWebService) context.getBean("testclient2");
studentWebService.list();
}catch (Exception e){
studentWebService = (StudentWebService) context.getBean("testclient");
}
}
}
在每次需要使用到时,先执行初始化方法init()即可
在服务端的main方法中,需要绑定服务器的公网ip:
public static void main(String[] args) {
System.setProperty("java.rmi.server.hostname","47.94.209.218");
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
}
在spring配置文件中,需要指定回传的端口:
<property name="servicePort" value="9999"/>
之后是将服务端打包为jar包,部署到服务器上,为了生成可以直接运行的jar包,需要在pom中添加插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>${exec.mainClass}</mainClass>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.schemas</resource>
</transformer>
</transformers>
<artifactSet>
</artifactSet>
</configuration>
</execution>
</executions>
</plugin>
其中的${exec.mainClass}为main方法所在的类名
上传到服务器上,使用java -jar xx.jar 可以运行jar包,使用java -jar xx.jar &可以后台运行,然后就可以在本地启动客户端的tomcat,进行访问,也可以再将客户端打成war包,部署到服务器上,效果基本一样,
明天的计划
开始任务九
遇到的问题
打包的问题,需要添加如上插件
收获
对远程方法调用有了一些了解
评论