发表于: 2017-10-10 23:42:12

1 719


今天完成的任务


1.部署两个service
最开始是打算再弄一个服务器,比如京东云(也可以免费用半年),但又要重新装JDK、jetty,或者其他软件,工作量比较大,暂时放弃这个方案。

然后我尝试了一个对象绑定两个不同的端口实现“部署两个service”这个任务要求,结果成功了,下面是实现的过程:


1)把原来的server复制一下,得到第二个server


2)实现随机访问
这个随机访问server并且在一个server挂掉后可以访问另一个server的功能在客户端实现。
首先是修改client的配置文件,新增一个server,绑定1299端口,这样就有两个server,分别绑定1199和1299两个端口:


实现代码如下,生成一个[0,10)左闭右开的随机整数,当随机数小于5的时候,访问server1;随机数大于5的时候访问server2:。并用try...catch块捕获异常,当发生异常的时候,访问另一个server。我在这里模拟访问10次远程serveice:


下面是运行的结果:

写完之后突然想到,云服务一般都会提供镜像这个功能,应该可以在京东云服务器通过镜像复刻我的阿里云服务器配置的吧。


3)然后是打包

这个项目使用了多个第三方依赖,直接使用mvn package命令打出来的jar包不包含第三方依赖。


在分布式这一块,将server打成jar,然后使用命令行运行这个jar的主程序(主程序就一句代码,用来初始化Spring配置文件,启动RMI服务)。但是这个jar包引用了第三方依赖的java程序。报NoClassDefFoundError,没有找到第三方依赖的异常:


解决问题的过程:

a.刚开始是少了context-support.jar这个jar包,在pom中引入这个jar包后重新打包运行,还是报同样的异常;
b.后来在网上兜兜转转看了一些相关的问题,慢慢的就锁定我的问题:使用mvn package命令打包,并不会把pom中引入的第三方依赖一起打包,所以报找不到jar包异常。
c.接着又在网上找到assembly插件的使用方法,并添加到自己的项目中。输入命令 mvn clean package重新打包,结果生成了两个jar包:1个jar是原来项目的,新增的那个jar包则是把所有的第三方jar包都打包起来了。

d.使用命令运行主程序jar包,还是报原来的异常。因为没有在主程序清单里指定第三方依赖的位置。但是因为要引用的jar包太多了,修改MANIFEST.MF文件这个方法实现起来比较麻烦。

e.最后没有找到解决方法,还是通过修改MANIFEST.MF文件解决问题。


tip:修改MANIFEST.MF文件,Class path后面要加一个空格,否则会报“无效头部字段”的异常;另外,lib为跟主程序jar包同级的文件夹



遇到的问题

因为要在一个服务器上运行两个server,也就是同时运行两个java程序,需要把java程序以后台方式启动


收获

学会使用assembly插件


明天的计划

1.把server部署到服务端,本地客户端访问

2.完成任务8剩下内容,提交任务8


进度

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


返回列表 返回列表
评论

    分享到