发表于: 2017-11-24 22:52:03

1 698


今天完成的事情

写了两个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包,部署到服务器上,效果基本一样,


明天的计划

开始任务九


遇到的问题

打包的问题,需要添加如上插件


收获

对远程方法调用有了一些了解


返回列表 返回列表
评论

    分享到