本文主要介绍ZeroC IceGrid的相关知识,以及如何使用IceBox构建一个IceGrid的demo程序。

1. 概述

IceGrid是为Ice服务提供的一个定位的、活化的服务。

IceGrid的基本框架,如下图所示:

待补充...

2. demo构建

说明:本文介绍的demo程序是在Centos 7上、使用C++语言开发的,对应的ice、icebox、icegrid版本为3.6.4。

沿用前文《ZeroC IceBox介绍及demo构建》中已编写的IceBox的基础框架文件(即Hello.ice、Hello.h、Hello.cpp、HelloI.h、HelloI.cpp、HelloServiceI.h、HelloServiceI.cpp、HelloService.cpp),我们继续编写IceGrid需要的其他文件。

2.6 编写注册器配置文件

说明:本节继承了前文《ZeroC IceBox介绍及demo构建》的部分内容,所以本节直接以2.6小节开始计数。

注册器配置文件(config.registry)的内容如下:

#
# The IceGrid instance name.
#
IceGrid.InstanceName=DemoIceGrid#
# IceGrid registry configuration.
#
IceGrid.Registry.Client.Endpoints=default -h localhost -p 4061
IceGrid.Registry.Server.Endpoints=default -h localhost
IceGrid.Registry.Internal.Endpoints=default -h localhost
IceGrid.Registry.Data=db/registry
IceGrid.Registry.PermissionsVerifier=DemoIceGrid/NullPermissionsVerifier
IceGrid.Registry.AdminPermissionsVerifier=DemoIceGrid/NullPermissionsVerifier
IceGrid.Registry.SSLPermissionsVerifier=DemoIceGrid/NullSSLPermissionsVerifier
IceGrid.Registry.AdminSSLPermissionsVerifier=DemoIceGrid/NullSSLPermissionsVerifier#
# Dummy username and password for icegridadmin.
#
IceGridAdmin.Username=foo
IceGridAdmin.Password=bar

注意:

  • 注册器存放数据的目录(IceGrid.Registry.Data)需要用户手动创建好。

节点配置文件(config.node1)的内容如下:

#
# The IceGrid locator proxy.
#
Ice.Default.Locator=DemoIceGrid/Locator:default -h localhost -p 4061#
# IceGrid node configuration.
#
IceGrid.Node.Name=node1
IceGrid.Node.Endpoints=default -h localhost
IceGrid.Node.Data=db/node1

注意:

  • 节点存放数据的目录(IceGrid.Node.Data)需要用户手动创建好。

应用配置文件(application.xml)的内容如下:

<icegrid><application name="HelloApplication"><service-template id="HelloService"><parameter name="name"/><service name="${name}" entry="HelloService:create"><description>A very simple service named ${name}</description><adapter name="${name}" endpoints="default -h localhost" id="${name}" replica-group="HelloGroup" server-lifetime="false"/></service></service-template><replica-group id="HelloGroup"><load-balancing type="round-robin" n-replicas="1"/><object identity="hello" type="::Demo::Hello"/></replica-group><node name="node1"><icebox id="IceBox" activation="on-demand" exe="icebox"><description>A sample IceBox server</description><service-instance template="HelloService" name="Hello"/></icebox></node></application>
</icegrid>

2.7 编写客户端代码及配置文件

客户端代码(client.cpp)如下:

#include <Ice/Ice.h>
#include <Hello.h>using namespace std;
using namespace Demo;int main(int argc, char* argv[])
{int status = 0;Ice::CommunicatorPtr ic;try{ic = Ice::initialize(argc, argv);Ice::ObjectPrx base = ic->stringToProxy("hello");HelloPrx hello = HelloPrx::checkedCast(base);if (!hello){throw "Invalid proxy";}string result = "";result = hello->SayHello("liitdar");cout << "[icegrid_with_icebox] client's result: " << result << endl;}catch (const Ice::Exception& ex){cerr << ex << endl;status = 1;}catch (const char* msg){cerr << msg << endl;status = 1;}if (ic){ic->destroy();}return status;
}

客户端配置文件(config.client)的内容如下:

#
# The IceGrid locator proxy.
#
Ice.Default.Locator=DemoIceGrid/Locator:default -h localhost -p 4061

2.8 编译生成客户端和IceBox的服务

编译生成客户端应用程序(client),命令如下:

g++ -o client -I. client.cpp Hello.cpp -lIce -lIceUtil -lpthread

编译生成IceBox的Ice服务(libHelloService.so),命令如下:

g++ -shared -fPIC -o libHelloService.so -I. HelloService.cpp HelloServiceI.cpp HelloI.cpp Hello.cpp -lIce

注意:由于节点服务器在执行(IceBox中的)Ice服务时,会在系统共享库路径下搜索Ice服务程序libHelloService.so,所以需要将libHelloService.so拷贝到系统的共享库路径下,否则节点服务器会提示找不到该Ice服务程序。本文中是将libHelloService.so拷贝到/lib64/目录下,如下:

cp libHelloService.so /lib64/

2.9 运行IceGrid组件

运行IceGrid组件的步骤如下:

说明:本文为了便于讲述,对于下面的每一步操作都会单独新建一个终端,运行相应的命令。在实际工作中,用户可根据具体情况,对这些操作使用后台模式运行。

1. 运行注册器,命令如下:

icegridregistry --Ice.Config=config.registry

2. 运行节点服务器,命令如下:

icegridnode --Ice.Config=config.node1

3. 运行IceGrid命令行管理工具,添加应用配置文件application.xml并查看应用配置信息,命令如下:

[root@liitdar /opt/liitdar/ice-3.6/icegrid]# icegridadmin --Ice.Default.Locator="DemoIceGrid/Locator:default -h localhost -p 4061"
user id: foo
password:
Ice 3.6.4  Copyright (c) 2003-2017 ZeroC, Inc.
>>> application list
>>>
>>> application add /opt/liitdar/ice-3.6/icegrid/application.xml
>>>
>>> application list
HelloApplication
>>>
>>> node list
node1
>>> server list
IceBox
>>> service list IceBox
Hello
>>>

说明:icegridadmin后接参数为注册器的定位器地址。

4. 新建一个终端,运行客户端,命令如下:

./client --Ice.Config=config.client

正常情况下,我们能够在上面的“运行节点服务器终端”和“运行客户端终端”两个终端中,看到节点服务器(中的IceBox服务器中的Ice服务)与客户端的信息交互情况,如下:

【节点服务器终端】:

【客户端终端】:

如果两个终端中出现了上述信息,说明使用IceBox的IceGrid的demo构建成功了。

ZeroC IceGrid介绍及demo构建(使用IceBox)相关推荐

  1. 几种常见的微服务架构方案简述——ZeroC IceGrid、Spring Cloud、基于消息队列

    微服务架构是当前很热门的一个概念,它不是凭空产生的,是技术发展的必然结果.虽然微服务架构没有公认的技术标准和规范草案,但业界已经有一些很有影响力的开源微服务架构平台,架构师可以根据公司的技术实力并结合 ...

  2. Qt开发技术:Q3D图表开发笔记(二):Q3DBar三维柱状图介绍、Demo以及代码详解

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/130150728 各位读者,知识无穷而人力有穷,要么改需 ...

  3. Qt开发技术:Q3D图表开发笔记(三):Q3DSurface三维曲面图介绍、Demo以及代码详解

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/130264470 各位读者,知识无穷而人力有穷,要么改需 ...

  4. MyBatis超详细介绍——SQL语句构建器类

    MyBatis超详细介绍--SQL语句构建器类 (本文作为学习笔记,了解更多请参考:MyBatis参考文档) MyBatis3提供了SQL类帮助构造SQL语句: private String sele ...

  5. 助力工业物联网,工业大数据项目介绍及环境构建【一、二】

    文章目录 工业大数据项目介绍及环境构建 01:专栏目标 02:项目背景 03:项目需求 04:业务流程 05:技术选型 06:Docker的介绍 07:Docker的网络 08:Docker的使用 0 ...

  6. Qt开发技术:QCharts(三)QCharts样条曲线图介绍、Demo以及代码详解

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/108022984 各位读者,知识无穷而人力有穷 ...

  7. ZeroC Ice权威指南-学习笔记2——IceBox

    另外写一个稍微复杂一点的调用过程 按照书本上的slice[为了更清晰,这里把文件名字改为onlinebook.ice] 保存之后,ice插件就为我们自动创建了对应的java代码 给项目增加logbac ...

  8. Qt开发技术:Qt的动态静态插件框架介绍和Demo

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/105481285 长期持续带来更多项目与技术分 ...

  9. Qt开发技术:Q3D图表开发笔记(一):Q3DScatter三维散点图介绍、Demo以及代码详解

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/129520187 各位读者,知识无穷而人力有穷 ...

  10. qchart折现图_Qt开发技术:QCharts(二)QCharts折线图介绍、Demo以及代码详解

    若该文为原创文章,未经允许不得转载 各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究 敬请期待- 红胖子,来也! 介绍了整体框架,开始动手码代码,按照顺序,从折线图开始. QCh ...

最新文章

  1. 网络推广外包浅析当下网站优化处于健康状态有利于网络推广外包
  2. 【云栖大会】基因计算:解读生命的力量
  3. property classmethod staticmethod的用法
  4. 增强学习Q-learning分析与演示(入门)
  5. 流式视频处理架构设计
  6. HiveQL: 数据定义
  7. mount 挂载光盘
  8. 程序怎么在matlab运行不了,这个程序在MATLAB 7.0中为什么运行不起来 那个工具箱怎么装...
  9. Java基础---面向对象(OOP)
  10. app抢购脚本如何编写_如何用1个记事本文件征服全世界?——cmd批处理脚本编写...
  11. 苹果发布iOS 12.4首个测试版 苹果信用卡即将来袭
  12. php 判断 单选按钮事件,jquery如何判断单选按钮是否选中
  13. pdf 复制文本 乱码_如何在保留格式的同时从PDF复制文本?
  14. linux测试会使系统崩溃吗,fio 命令入门到跑路(千万不能在系统所在的分区测试硬盘性能)...
  15. 简述改变计算机桌面背景的方法,怎么设置和更改桌面背景
  16. 数据管理DMS移动版之2018新年巨献
  17. 如何刷鸿蒙OS,普通安卓手机如何刷鸿蒙系统?
  18. python 打印一定范围的素数(质数)
  19. 动态域名解析服务器离线会引起什么_动态域名解析过程中可能出现的问题及解决方案...
  20. mstsc 后 不锁屏

热门文章

  1. LeetCode 655. Print Binary Tree (C++)
  2. Java之品优购课程讲义_day05(4)
  3. RabbitMQ 消息队列
  4. CI/CD:DevOps背后的推动力
  5. FTP:介绍、vsftpd搭建ftp、xshell使用xftp传输文件、pure-ftpd搭ftp
  6. 图书馆管理系统(C语言实现)
  7. js hasChildNodes()指针对元素节点子节点多个的话 true
  8. winform datagridview 自定义tooltip
  9. 取出Cookie中的中文显示乱码解决方法。经验证第三种方法有效。
  10. DHTML【6】--CSS