详细教你如何部署ICE服务(三)---IceBox框架 & Ice Registry服务注册中心的联合使用
2017-07-06 17:54
381 查看
在详细教你如何部署ICE服务(二)---IceBox加载启动Ice服务这篇博客中,我们使用了IceBox来设计服务代码和启动Ice服务。单单使用IceBox组件来设计和启动Ice服务,客户端必须将服务端的EndPoint写死到代码中,为了解决这个问题,Ice设计了服务注册表Registry组件,这是一个以二进制文件形式存储运行期Ice服务注册信息的独立进程,作为服务的metadata存储数据中心,以供客户端查询。依托Registry的功能,Ice服务实现了ServiceLocator组件,这是一个标准的Ice Object服务对象,我们可以在自己的服务端调用这个寻址服务,从而解决客户端寻址的问题。Service Locator组件实现了两个非常实用和重要的功能:
Ⅰ:自动实现了多种可选择的负载均衡算法,客户端代码无需自己再实现
Ⅱ:服务部署位置和部署数量发送变化之后,客户端无需重启,自动感知和适应Registry组件作为一个独立的进程,他通过icegridregistry命令,依赖一个属性配置文件来启动。
我们先来看Registry的配置文件registry.cfg
#开放Registry连接协议 端口 IceGrid.Registry.Client.Endpoints=tcp -p 4061 IceGrid.Registry.Server.Endpoints=tcp IceGrid.Registry.Internal.Endpoints=tcp #设置登录Registry方式 IceGrid.Registry.AdminPermissionsVerifier=IceGrid/NullPermissionsVerifier #Registry持久化数据存放目录,这个目录需要手动提前创建,否则启动Registry会报错 IceGrid.Registry.Data=/data/web/yujie_ice/registry/data/registry #是否允许动态注册服务,开发阶段可以,而生产部署建议禁止开启 IceGrid.Registry.DynamicRegistration=1
通过命令icegridregistry --Ice.Config=/data/web/yujie/etc/registry.cfg
启动之后,在Registryde的持久化数据目录中可以看到如下的文件:介绍完Registry之后,我们开始改造上篇博客中查询雇员信息的服务。
(1)服务端的代码保持不变
/*** 使用IceBox 来加载启动 ice服务* @author yujie.wang**/public class QueryEmployeeServer implements Service{private ObjectAdapter adapter;/*** ice服务在start方法中初始化* paramString :ice Object name* paramCommunicator: Ice 通信器* paramArrayOfString : 服务启动的一些初始化参数*/@Overridepublic void start(String paramString, Communicator paramCommunicator,String[] paramArrayOfString) {// TODO Auto-generated method stubadapter = paramCommunicator.createObjectAdapter(paramString);QueryEmployeeImpl servant = new QueryEmployeeImpl();adapter.add(servant, paramCommunicator.stringToIdentity(paramString));// 激活adapteradapter.activate();System.out.println("adapter has been activate");}@Overridepublic void stop() {// TODO Auto-generated method stubadapter.destroy();System.out.println("adapter has been destory");}}
(2)修改IceBox的配置文件config.properties
增加如下两行:
#Ice Registry的协议 地址 端口Ice.Default.Locator=IceGrid/Locator:tcp -h 10.4.30.81 -p 4061#配置queryServer的适配器IdqueryServer.AdapterId=queryServerAdapter通过配置服务的AdapterId,我们就可以使用service@adapterId的间接代理的EndPoint方式来寻址服务了。
修改好IceBox的配置文件之后,我们还是使用我的简易容器来启动Ice服务。
我们执行 sh startIceServer.sh & 启动服务。
(3)改造客户端代码
/*** 使用IceBox和IceRegistry,客户端调用服务的方式* @author yujie.wang**/public class QueryEmployeeClient {public static void main(String[] args) {// TODO Auto-generated method stubIce.Communicator communicator = null;try {// 传入远程服务单元的名称、网络协议、IP及端口,构造一个Proxy对象//communicator = Ice.Util.initialize(args);// Ice.ObjectPrx op = communicator.stringToProxy("queryServer1:default -h 10.4.30.81 -p 10006");//这里配置好Ice Registry的协议 主机 端口 作为通信器communicator的初始化参数String[] initParams = new String[]{"--Ice.Default.Locator=IceGrid/Locator:tcp -h 10.4.30.81 -p 4061"};// 初始化通信容器communicator = Ice.Util.initialize(initParams);//这里使用service@adapterId的形式寻址Ice.ObjectPrx op = communicator.stringToProxy("queryServer@queryServerAdapter");QueryEmployeePrx qp = QueryEmployeePrxHelper.checkedCast(op);if(qp == null){throw new Exception("qp == null");}EmployeeInfo ei = new EmployeeInfo();ei.name = "yujie.wang";EmployeeInfo result = qp.query(ei);if(result == null){throw new Exception("result == null");}System.out.println(result.remark);} catch (Exception e) {// TODO: handle exception}}}之后调用服务输出:
(4)总结
使用IceBox和Ice Registry方式来部署服务,虽然解决了客户端寻址的问题,但是还是没有实现Ice服务的负载均衡,
Ice服务的启动方式,还是用我的简单容器来启动。
为了解决这个问题Ice设计了Ice Node来进行服务的部署,并且通过统一的xml文件来配置服务,这个xml文件替代了IceBox的属性配置文件。
下一篇博客我们将会讲解 Ice服务的真正的强大的Ice Grid部署方式。
相关文章推荐
- OpenStack使用Bosh部署CloudFoundry(七)—部署MongoDB&Redis等服务
- Laravel框架如何使用阿里云ACE缓存服务
- java日志框架log4j详细配置及与slf4j联合使用教程
- 如何在Visual Studio 2017中使用C# 7+语法 构建NetCore应用框架之实战篇(二):BitAdminCore框架定位及架构 构建NetCore应用框架之实战篇系列 构建NetCore应用框架之实战篇(一):什么是框架,如何设计一个框架 NetCore入门篇:(十二)在IIS中部署Net Core程序
- 如何使用Azure云服务和SQL Database部署PHP应用
- [转载]java日志框架log4j详细配置及与slf4j联合使用教程
- 五分钟阅读阿里巴巴架构师如何使用微服务框架搭建电商平台全过程
- 如何使用 Hexo && 部署至GitHub Pages [tags] [翻译]
- 如何使用nginx,在同一个tompcat下面部署多个服务
- 如何使用Azure Container Service Engine在Azure中国区部署容器服务(一):DC/OS篇
- 基于.NET CORE微服务框架 -浅析如何使用surging
- 如何:使用 ADO.NET 实体框架数据源创建数据服务(WCF 数据服务)
- 如何使用Azure Container Service Engine在Azure中国区部署容器服务(一):DC/OS篇
- 基于.NET CORE微服务框架 -浅析如何使用surging
- java日志框架log4j详细配置及与slf4j联合使用教程
- 五分钟阅读阿里巴巴架构师如何使用微服务框架搭建电商平台全过程
- Symfony框架 & Sylius电商系统的Linux终端命令(bin/console打头的命令)如何使用XDebug单步调试
- java日志框架log4j详细配置及与slf4j联合使用教程
- java日志框架log4j详细配置及与slf4j联合使用教程