发表于: 2017-12-02 23:00:07

1 737


今日完成的事情:

今天首先是配置了两台server,就是把第一个server完全的copy了一份。修改了一下绑定的端口。然后再client端的spring配置:

<bean id="myRMIClient1" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
   <property name="serviceInterface" value="com.mmy.service.UserService"/>
   <property name="serviceUrl" value="rmi://127.0.0.1:1111/userServiceImpl"/>
   <property name="refreshStubOnConnectFailure" value="false"/>
</bean>
<bean id="myRMIClient2" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
   <property name="serviceInterface" value="com.mmy.service.UserService"/>
   <property name="serviceUrl" value="rmi://127.0.0.1:2222/userServiceImpl1"/>
   <property name="refreshStubOnConnectFailure" value="false"/>
</bean>

把server1和server2都启动,然后就可以在client端访问。

接着写了一个随机函数,让client可以随机访问两台server,再对随机函数部分进行处理,就可以实现一台server挂掉,不影响第二个server的调用:

具体的代码:

@RequestMapping(value = "/user/list", method = RequestMethod.GET)
public String listUser(Model model) {
int i = (int) (Math.random() * 10);
   if (i <= 2) {
try {
List<User> list = rmiUserService1.queryAllUser();
           model.addAttribute("list", list);
           System.out.println("======connect server1=====");
       } catch (Exception e) {
List<User> list = rmiUserService2.queryAllUser();
           model.addAttribute("list", list);
           System.out.println("======connect server2=====");
       }
} else {
try {
List<User> list = rmiUserService2.queryAllUser();
           model.addAttribute("list", list);
           System.out.println("======connect server2=====");
       } catch (Exception e) {
List<User> list = rmiUserService1.queryAllUser();
           model.addAttribute("list", list);
           System.out.println("======connect server1=====");
       }
}
return "listUser";

这里我的每一个接口都写了一边上面的过程,有点复杂,。然后我就试着把重复的代码写出来单独作为一个函数:

public UserService getRmiUserService(){
int i = (int) (Math.random() * 10);
   if (i <= 2) {
try {
System.out.println("======connect server1=====");
           return rmiUserService1;
       } catch (Exception e) {
System.out.println("======connect server2=====");
           return rmiUserService2;
       }
} else {
try {
System.out.println("======connect server2=====");
           return rmiUserService2;
       } catch (Exception e) {
System.out.println("======connect server1=====");
           return rmiUserService1;
       }
}
}

具体的代码如上。

但是这样写失败了。其中一台挂掉的情况下,就会报错,最后只有多谢一些代码了。

最是是部署到服务器上面。

利用shade插件把两台server达成可运行的jar,然后再在服务器上利用java -jar xxxx.jar &让jar可以后台运行。把client打成war,部署到服务器的tomcat,本来以为一切都很顺利,结果跑不出来。

然后百度一通,把server端的spring改写:

<bean id="userServiceImpl" class="com.mmy.serviceImpl.UserServiceImpl"/>
<bean id="myRMIServer"  class="org.springframework.remoting.rmi.RmiServiceExporter">
   <property name="service" ref="userServiceImpl"/>
   <property name="serviceInterface" value="com.mmy.service.UserService"/>
   <property name="registryPort" value="1234"/>
   <property name="serviceName" value="userServiceImpl"/>
   <property name="servicePort" value="1111"/>

服务器端的通信接口是随机的,在这里我把通信接口绑定到1111 。

改写后的main方法:

public static void main(String[] args) {
System.setProperty("java.rmi.server.hostname","47.95.201.115");

   new ClassPathXmlApplicationContext("Spring.xml");

   System.out.println("service binding success");
}

绑定公网IP。

client端的spring改写:

<bean id="myRMIClient1" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
   <property name="serviceInterface" value="com.mmy.service.UserService"/>
   <property name="serviceUrl" value="rmi://47.95.201.115:1111/userServiceImpl"/>
   <property name="refreshStubOnConnectFailure" value="false"/>
</bean>
<bean id="myRMIClient2" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
   <property name="serviceInterface" value="com.mmy.service.UserService"/>
   <property name="serviceUrl" value="rmi://47.95.201.115:2222/userServiceImpl1"/>
   <property name="refreshStubOnConnectFailure" value="false"/>
</bean>

做成这一切事情之后,再次重复上面的步骤,还是跑不出来。目前正在分析原因。

明日计划的事情:

解决在服务器上跑不出来的问题。

遇到的问题:

查找了好多资料,还是没有最根本的解决方法。明天继续。

收获:

部署两台server,实现随机访问,并且一台挂了的情况下,不影响程序的运行。

任务开始时间:2017/12/1

预计完成时间:2017/12/6

延期:无

禅道:http://task.ptteng.com/zentao/my-task.html



返回列表 返回列表
评论

    分享到