发表于: 2017-04-20 23:54:20

4 1497


今天完成的事情:

一.部署两台Service,在WEB中随机访问任意一台Service。

部署两台 service 的方式:

重新建一个model,和上一个service大致一样。

把两个service都注入到controller里面

    double v = 2 * Math.random();
   int flat = v < 1 ? 1 : 2;
   List<Student> studentList = null;
   if(flat == 1){
try {
studentList = studentService.findAllStudent();
           System.out.println("service 访问");
       } catch (Exception e) {
//e.printStackTrace();
           //System.out.println("service 异常");
           try {
studentList = studentService2.findAllStudent();
               System.out.println("service 异常,service2  访问");
           } catch (Exception e1) {
//e1.printStackTrace();
               System.out.println("service 和service2 异常");
           }
}
}else {
try {
studentList = studentService2.findAllStudent();
           System.out.println("service2 访问");
       } catch (Exception e) {
//e.printStackTrace();
           //System.out.println("service2 异常");
           try {
studentList = studentService.findAllStudent();
               System.out.println("service2 异常 service 访问");
           } catch (Exception e1) {
//e1.printStackTrace();
               System.out.println("service2 和 service 异常");
           }
}
}
model.addAttribute("studentList", studentList);
   return "student";
}

我是用的这种蠢方法实验的,如果service多的话,try catch 可能会受不了。

这是实验的结果:
service 访问
service2 访问
以上是两个 service 都成功启动
service2 访问
service 异常,service2  访问
service 异常,service2  访问
以上是停掉一个service
service2 和 service 异常
service2 和 service 异常
以上是两个都停掉

这儿就出现问题了:当把停掉的service重新启动,却不能访问!!!

当然,我也是参考师兄的日报才发现问题,原因是注入的service实例会在容器启动之后就一直是这个实例,重启并不能产生新的实例,只有已经注入好的实例。

解决 :(部分代码)标黄的地方是发生改动的地方

        context = WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext());

        double v = 2 * Math.random();

        int flat = v < 1 ? 1 : 2;

        List<Student> studentList = null;

        if(flat == 1){

            try {

                StudentService studentService = (StudentService) context.getBean("studentService");

                studentList = studentService.findAllStudent();

                System.out.println("service 访问");

            } catch (Exception e) {

                //e.printStackTrace();

                //System.out.println("service 异常");

                try {

                    StudentService studentService2 = (StudentService) context.getBean("studentService2");

                    studentList = studentService2.findAllStudent();

                    System.out.println("service 异常,service2  访问");

                } catch (Exception e1) {

                    //e1.printStackTrace();

                    System.out.println("service 和service2 异常");

                }

            }

        }else {

结果:重启服务端之后可以重新访问。

二.部署两台WEB,通过Nginx配置两台WEB随机访问,两台WEB可以随机访问两台Service。

这个花费了很长时间:

1.第一次我直接把 task8-controller 的war 包发布到虚拟机上,然后访问,出现的错误是:

: Connection refused to host

因为:rmi的地址

<bean id="studentService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
     <property name="serviceUrl" value="rmi://localhost:8011/StudentService"/>
     <property name="serviceInterface" value="org.xiuzhenyuan.service.StudentService"/>
    <!--setting refresh connect-->
    <!--<property name="refreshStubOnConnectFailure" value="true"/>-->
</bean>

2.尝试了很多的东西,修改本地的host,不管用。

网上有这种方法:

我试了,启动都不行。

3.最后:

修改修改虚拟机的host文件:不知道这样改对不对,总之是远程的web 可以调用本地的service了。

三。配置nginx

说多了都是泪,每配置一次,都会刷新一次认知。

先上结果:

访问的是远程:

访问的是本地:

可以看到,访问的地址都是localhost开头。


nginx.conf(按照我的认识:url应该是 http://xiuzhenyuan/)但是却是报错404


小马交给我要配置本地host文件,然而并不管用。


2017/4/21

补充:关于rmi服务端重启后,不能使用。(前一个方法也是一种思路,这个比较简便。)

在rmi的客户端配置文件修改为:

<bean id="studentService2" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
   <property name="serviceUrl" value="rmi://localhost:8013/StudentService"/>
   <property name="serviceInterface" value="org.xiuzhenyuan.service.StudentService"/>
   <!--setting refresh connect-->
   <property name="refreshStubOnConnectFailure" value="true"/>
</bean>

setting refresh ,加上这个即可。一开始搜到的文档说要设置延迟还有rmiScoketFactory,感觉有点复杂,没法下手。今天又搜索了一次,发现有个说直接加这个就可以,我试了一遍,可以!

文章:http://stackoverflow.com/questions/1477121/reconnect-rmi-client-after-server-restart

stackoverflow上好多解决问题的帖子,只是英语有点伤。




明天计划的事情:

1.开始任务九,终于到这儿了。

遇到的问题:

1.虽然说远程的controller可以访问本地的service了,但是没有数据不知道是什么鬼。

收获:

关于网络方面的知识真心差,好多不懂得,知道了差距,就要努力。



返回列表 返回列表
评论

    分享到