ZeroC Ice权威指南-学习笔记4——IceGrid Node

有了IceRegistry,就可以请出主角IceGrid Node出场了。
本节工作目录还是沿用上次的node。

  1. 添加IceGrid Note配置node1.cfg
    【img-4-1】

注意这里面有两个目录,需要提前创建好。

  1. 启动
    通过观察配置,我们可以看到,IceGrid Node的日志只关联了Registry。而Registry是不会主动去关联IceBox服务的。所以IceBox服务不能停下来,config.properties配置还是需要由IceBox“主动推送”给Registry。
    和启动IceRegistry类似
    命令:icegridnode.exe --Ice.Config=D:\ws-ecp\TestIce\src\com\node\node1.cfg
    【img-4-2】

和IceRegistry一样,这个启动完也没什么日志

  1. 查看数据目录
    检查发现:里面虽然多了一些目录和文件,但都是空的。这一点和书本上有出入。。。感觉是哪里配置的有问题。

  2. 验证效果
    虽然日志上有问题,但。。。既然IceBox还启动着,这里多启动一个IceGrid Node似乎也可有可无。。。但书上说 IceGrid Node的作用之一是启停IceBox。。。

是不是感觉什么地方出错了。
其实问题出在书本的编写上。让我们误以为启动完IceGrid Node后就能看出什么效果,其实根本不是。单独只启动IceGrid Node并没有什么用,至少是看不出来的。必需按照书本的“3.5 IceGrid”实战做完之后,才能看到IceGride Node的作用

5.1. 关键的角色:icegridadmin
虽然核心逻辑在IceGrid Node里,但它仅仅是一个“没有鼠标键盘的电脑”,需要用icegridadmin这个工具来操控它。

5.2. 写IceGrid的配置文件simplegrid.xml
这个配置文件可以放在任何地方,这里是为了管理方便,就也放在node目录下了
【img-4-3】

几个关键的需要改动的地方已经标注出来
其中最重要的是CLASSPATH,又因为从前面发现 我们没有引入IceGrid Node的jar包,所以:和启动IceBox不同,这次只能把项目打包放入classpath
可以直接使用eclipse是Exceport——>java——>Runnable JAR file(之所以用eclipse,也是因为eclipse除了有Ice插件,可以很方便的编译出java代码,而且打包也方便。当然用IDEA也是可以的,需要配置maven插件,同样可以打出带依赖包的jar包)
【img-4-4】

【img-4-5】

注意圈中的地方,可以随便选,因为我们并不会拿这个jar包来直接运行,所运行参数用不上。

5.3. 启动icegridadmin
你可能会想在启动icegridadmin的时候 用上前面写的xml配置文件,其实并不是这样。icegridadmin只是一个工具(可以认为就是iceGrid的一个操作界面,ice也确实给我们提供了有操作界面的工具,可以方便的操作,而不用命令行),而那个xml是IceGrid的核心配置。
启动命令:icegridadmin.exe -u test -p test --Ice.Default.Locator=“IceGrid/Locator:tcp -h localhost -p 4061”
【img-4-6】

icegridadmin启动成功。接下来就可以操作IceGrid了。
先别着急,IceGrid可以不是孤军奋战的,它的作用是协调其他服务。所以在操作IceGrid之前 需要把必要的两个服务启起来(前面已经起的就可以跳过了)。

  1. Ice Registry:
    icegridregistry.exe --Ice.Config=D:\ws-ecp\TestIce\src\com\node\registry.cfg
  2. IceGride Node:
    icegridnode.exe --Ice.Config=D:\ws-ecp\TestIce\src\com\node\node1.cfg

不需要单独启动IceBox了,因为IceGrid的功能之一就是控制IceBox的启停。
两个服务启动后,使用IceGrid加载服务,回到icegridadmin的操作界面

  1. 加载Application xml
    在>>>后面输入命令:application add D:\ws-ecp\TestIce\src\com\node\simplegrid.xml
    这里才真正把我们的配置文件加载进IceGrid中
    【img-4-7】

注意:也许你在实操中会反复操作,想关闭icegridadmin后再加载一次xml,会发现
【img-4-8】

仔细想想就会明白:前面也说了,icegridadmin仅仅是IceGrid的一个操作界面,它的启停并不影响IceGrid的现状,已经加载的服务,即使关闭了icegridadmin,服务依然处于被加载的状态。

经过实验发现:即使把IceGrid Node重启,application "MyPowerIce2"依然处于被加载的。
那么答案就显而易见了:Ice Registry起到了一个“数据库”的作用。必需把Ice Registry也重启才行。。。不,当你这么想的时候,发现又错了。重启Ice Registry也没用,那么解释就是:Ice Registry具有容灾恢复功能,是会把服务序列化存储起来的。所以想删除服务,解铃还须系铃人,用命令操作删除服务。
好像书上没有说怎么删除服务。只说了怎么查看服务的命令
server list
【img-4-9】

通过help命令查看help application
【img-4-10】

可以通过application remove MyPowerIce2
删除加载的application

通过help命令查看help server
【img-4-11】

可以看到也有remove的操作
后面的ID其实就是前面看到的“HelloServer1”, “HelloServer2”
所以通过
server remove HelloServer1
server remove HelloServer2
可以单独删除application中的某些server

其他操作,可以参考书本和help命令学习。至此,我们的IceGrid服务就算起好了,下面用客户端访问一下。

  1. 客户端请求。验证IceGrid部署是否成功
    【img-4-12】

请求之后,客户端控制台没有任何日志输出。因为SMSService本身就没有给客户端返回数据。所以为了确认效果,需要看”服务端日志“,日志在控制台没有输出,而是写入了IceGrid node日志文件。
打开node1.cfg里配置的日志目录,里面有两个日志,一个是输出日志(node.stdout.log),一个是异常日志(node.stderr.log)。都检查一下,看是否有报错提示,如果有,说明我们的代码或操作有误,通过日志可以排查。而我们的程序正常输出的日志在node.stdout.log里:
【img-4-13】

  1. 使用icegridgui.jar
    【img-4-14】

这是和icegridadmin.exe效果基本等同的工具,只不过有更加直观便捷的界面操作。
java -jar icegridgui.jar (或者直接双击)
按以下步骤操作:
1.
【img-4-15】

【img-4-16】

【img-4-17】

【img-4-18】

【img-4-19】

  1. 进入主页
    【img-4-20】

  2. 可以右键启动服务
    【img-4-21】

  3. 这是正常启动的服务样子(带有绿色三角)
    【img-4-22】

  4. 可以先不手动启动(或者启动后手动右键stop),直接使用MyClient访问试试,正常是可以访问的。观察GUI界面,发现服务被自动启动起来了,而且两个服务都会被启动起来(这也是书本3.5节作者最后留的”课后实验题“)。这也很直观的验证了simplegrid.xml中 activation="on-demand"的作用 : 按需启动。
    学会了GUI的基本操作,我们就可以对比着icegridadmin命令行工具里的help命令和这个具有相同功能的GUI工具相互学习,探索IceGrid的其他功能。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值