发表于: 2017-11-09 23:08:02

1 777


今天完成的事情:

1.提交任务8

首先任务8,主要的还是如何以一种非常优雅的方式去实现一台service挂掉直接切换另一台service.

今天一天试了很多方法,有些就快成功了,却遇到技术上的障碍放弃了...最后不得不换了个我觉得很笨拙的方法去实现.


还有就是任务8怎么分离客户端和服务端呢,怎么分离首先要明白分离要达到一个什么目的,即why?

其实不管人生(虽然早已丧失了生活信心)还是各种事,主要知道了目的就不再迷茫不再瞻前顾后的.查了一些资料自己也做了一些思考,认为分离无非是为了,第一复用service功能,第二支持分布式以便能够提高响应速度和稳定性.


那么知道了目的,我们就知道怎么分离了,对于短信接口邮件接口图片上传功能接口.假设你以后不单单只写web项目,不单单你目前这个项目会用到.还可能有其他桌面项目,app项目会用到这些接口,那么放在客户端明显就无法达到复用的目的了

还有与数据库进行交互的service方法接口等也同样,一开始设计的时候就要想到复用.所以也不适合放在客户端.


还有一点就是说服务端和客户端进行交换数据的对象必须实现接口以支持序列化,如果你的对象里也有对象且该对象没有实现接口不支持序列化,那么整个对象会序列化失败.还有就是必须给序列化对象客户端和服务端都加上UID值,必须相同否则无法反序列化.如下图:

客户端:

服务端


对于如何设计当一台service挂掉切换另一台service不受影响,最初方案如下:

对于所有使用service服务的方法加上抛出ConnectException和ConnetIoException.

然后对这些方法运行aop的环绕通知,当这些方法出现我的环绕通知捕捉到后直接更新所有远程服务对象bean,然后将缓存设置为false以便重新从服务端获取服务.


谷歌上搜了很多资料发现是可以在运行期间更新bean的属性值的,我测试了也是可以,不过应用在项目中时老是出错,搞了将近一天也没搞完,因为对aop这些稍微底层的缺乏了解就放弃了.


最后选用了非常非常笨拙的方法,就不详述了,贴一下代码


因为要做复盘就没有深入去做拓展了,感觉任务8看起来简单但是还是不简单,需要考虑的东西非常多,计划是在做完复盘情况下重新做任务8


2.简单去了解了下字节流和字符流

因为很久之前也学过,字符流更多的是应用在读取文本等领域,字节流更多的是应用在文件传递这块.

而且字节流是有缓冲流的,比如说我们一个字符一个字符对很不好,那么可以再套一个缓冲流以便支持一行一行读取.

也可以套其他的缓冲流,比如我很久之前写坦克大战用过的读取一个基本类型或者读取一个对象.


其他的也没啥可讲的,网上一大推.


明天计划完成的事:

1.完成任务9


遇到的困难:

1.不知道是阿里云坑爹还是什么原因,service打成jar包运行,运行jar包一段时间后就自动结束了.即使是Jar包一直处于待输入状态


收获:

通过任务8还是发现自己之前写的代码太随意了,导致任务8出现一些问题.

也更加让我坚定了规范化严谨编码代码的决心.


返回列表 返回列表
评论

    分享到