发表于: 2018-02-28 22:10:27

1 727


今天完成的任务

1.client端随机调用两个service

1.1service端的配置。

在本机配置2个不同端口的service并启动,配置两个xml就可以了。

<property name="registryPort" value="1199"/>

注册端口改为不相同的两个值。



1.2client端配置。

想把serviceUrl随机注入,但是xml中没办法实现。

复习了一下spring注入的内容,发现使用javaconfig的方式配置bean可以在配置过程中写代码。

//@Configuration
//public class AppConfig {
//
//    private static final Logger logger = (Logger) LoggerFactory.getLogger(AppConfig.class);
//
//    @Bean(name="studentService")
//    public RmiProxyFactoryBean rmiProxyFactoryBean(){
//        String rmi = RandomService.getRandomServicermi();
//        RmiProxyFactoryBean rmiProxyFactoryBean = new RmiProxyFactoryBean();
//        rmiProxyFactoryBean.setServiceUrl(rmi);
//        rmiProxyFactoryBean.setServiceInterface(StudentService.class);
//        //连接错误自动重连
//        //rmiProxyFactoryBean.setRefreshStubOnConnectFailure(true);
//        //不在容器启动的时候创建server端连接
////        rmiProxyFactoryBean.setLookupStubOnStartup(false);
//            try{
//                rmiProxyFactoryBean.afterPropertiesSet();
//            }catch (Exception e) {
////              throw new RemoteException("Error create rmi proxy");
//                RmiProxyFactoryBean rmiProxyFactoryBean1 = new RmiProxyFactoryBean();
//                rmiProxyFactoryBean1.setServiceUrl(RandomService.getanotherrmi(rmi));
//                rmiProxyFactoryBean1.setServiceInterface(StudentService.class);
//                logger.info("正在是用服务:"+RandomService.getanotherrmi(rmi));
//                return rmiProxyFactoryBean1;
//            }
//        logger.info("正在是用服务:"+rmi);
//        return rmiProxyFactoryBean;
//    }



遇到的问题

1.client随机调用一个service可以使用了。但是如何实现在一个service宕机的时候切换的另一个service?因为bean的装配在程序启动的时候就已经装配好了,运行过程中没有办法改变,也没有找到捕获异常的办法。


解决办法:看了几位师兄的日报,都是使用ClassPathXmlapplicationcontext  然后getBean来捕获DI中的异常。

try {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(RmiConfig.class);
   studentService = (StudentService) context.getBean("rmiservice1199");
   logger.info("service1199 action");
} catch (Exception e) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(RmiConfig.class);
   studentService = (StudentService) context.getBean("rmiservice1198");
   logger.info("service1199 bad to service1198 action");
}



收获

1.学会了简单使用javaconfig配置spring。

@Configuration
@ComponentScan
public class RmiConfig {
   @Bean(name = "rmiservice1199")
   @Lazy
   public RmiProxyFactoryBean studentService1(){
       RmiProxyFactoryBean rmiProxyFactoryBean = new RmiProxyFactoryBean();
       rmiProxyFactoryBean.setServiceUrl("rmi://127.0.0.1:1199/RemoteService");
       rmiProxyFactoryBean.setServiceInterface(StudentService.class);
       return rmiProxyFactoryBean;
   }

2.又复习了一遍spring的di内容,了解了单例和原型,但是原型使用没有成功,可能是理解还有点问题。

  • 单例(singleton):整个应用中,只创建一个bean实例
  • 原型(prototype):每次注入或者获取,都会创建新的bean实例


明天的计划

1.使用nginx配置2个web,然后调用2个service。如果顺利总结任务8提交任务。






返回列表 返回列表
评论

    分享到