本文介绍搭建ZeroC IceGrid demo的方法,该demo的搭建过程中使用到了Ice提供的Ice::Application类。

1. 概述

继承Ice::Application类,搭建IceGrid demo时,实际上是对外提供接口的Ice服务(即server)继承了Ice::Application类。在IceGrid框架工作时,直接调用了该server程序;而使用IceBox搭建IceGrid时,则是通过icebox命令间接地调用了Ice服务。

2. demo构建

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

沿用博客《ZeroC Ice demo构建(继承Ice::Application类)》中已编写的继承Ice::Application类的基础框架文件(即Hello.ice、Hello.h、Hello.cpp、HelloI.h、HelloI.cpp、server.cpp、config.server),我们继续编写IceGrid需要的其他文件。

2.6 编写注册器配置文件

说明:本节继承了博客《ZeroC Ice demo构建(继承Ice::Application类)》的部分内容,所以本节直接以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="Simple"><node name="node1"><server id="SimpleServer" exe="./server" activation="on-demand"><adapter name="HelloAdapter" endpoints="tcp -h localhost"><object identity="hello" type="::Demo::Hello" property="Identity"/></adapter></server></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_application] 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 编译生成客户端和服务端

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

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

编译生成服务端程序(server),命令如下:

g++ -o server -I. server.cpp Hello.cpp HelloI.cpp -lIce -lIceUtil -lpthread

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_with_app]# 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_with_app/application.xml
>>>
>>> application list
Simple
>>>
>>> server list
SimpleServer
>>>

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

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

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

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

【节点服务器终端】:

【客户端终端】:

如果两个终端中出现了上述信息,说明继承Ice::Application类的IceGrid的demo构建成功了。

ZeroC IceGrid demo构建(继承Ice::Application类)相关推荐

  1. Ice笔记-利用Ice::Application类简化Ice应用

    作者:ydogg,转载请申明. 在编写Ice相关应用时,无论是Client还是Server端,都必须进行一些必要的动作,如:Ice通信器初始化.异常捕获,以及应用终止后的销毁.鉴于每个应用都需要,Ic ...

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

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

  3. Android 实例解说Application类

    版本:1.0 日期:2014.3.28 版权:© 2014 kince 转载注明出处 何为Application,有何用途?Google官方文档是这样说的:维护全局应用程序的状态,使用的时候继承于它创 ...

  4. Android中用Application类实现全局变量

    在Java中如果要使用全局变量,一般定义public static类型的变量.但是这种方法不符合Android的框架架构,Android中要使用Application context. Applica ...

  5. Java:继承之super关键字,继承之私有权限,继承之方法重写,继承之object类,继承之简单工厂模式

    一.继承的概念及用法       继承背后的思想就是        基于已存在的类来构建新类         当从已存在类继承时,就重用了它的方法和属性,还可以添加新的方法和属性来定制新类以应对需求 ...

  6. Android中Application类用法

    Application类 Application和Activity,Service一样是Android框架的一个系统组件,当Android程序启动时系统会创建一个Application对象,用来存储系 ...

  7. 20151008_Android Application类

    1. Application类 Application和Activity,Service一样,是android框架的一个系统组件,当android程序启动时系统会创建一个 application对象, ...

  8. 在Android开发中怎样使用Application类

    转载地址:http://www.jianshu.com/p/3138f9c351e8 --- 在Android开发中怎样使用Application类 自己独立开发项目才发现以前对Application ...

  9. 什么是继承?Java中如何声明一个类继承另一个类?

    在现实生活中,说到继承,多会想到子女继承父辈的财产.事业等.在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关联体系.例如猫和狗都属于动物,程序中便可以描述为猫和狗继承自动 ...

  10. java 安卓application_Android中Application类用法

    Application类 Application和Activity,Service一样是Android框架的一个系统组件,当Android程序启动时系统会创建一个Application对象,用来存储系 ...

最新文章

  1. 京东区块链白皮书解读, 做“链接器”,一次技术宣言
  2. 如何使用VMware Converter进行P2V热迁移
  3. 120.数据缓存cache的基本概念
  4. Java 技术篇-IntelliJ IDEA 导入数据库驱动jar包实例演示
  5. jms在jboss上的简单应用
  6. jquery on()事件
  7. Excel导入MS SQL SERVER 操作
  8. derby mysql 同步_[Derby]数据库操作说明
  9. 什么是气泡图?怎样用Python绘制?有什么用?终于有人讲明白了
  10. PyTorch入门-词向量
  11. 如何实现A星寻路算法 Cocos2d-x 3 0 beta2
  12. 计算机图形学E10——Bezier曲线
  13. 搜索引擎分词:Nutch整合Paoding中文分词步骤详解
  14. 100套PPT模板用于论文答辩、工作方案等
  15. 抛负载”ISO 7637-2测试标准讲解,车规级TVS管优选建议
  16. Python3 PyV8“安装与使用”教程
  17. SpringMVC i18n国际化资源文件路径配置
  18. 按键精灵自动过QQ滑块脚本 ,速度最快的源码库存!
  19. java中package(包)的使用理解
  20. sort函数使用cmp出错Line 22: Char 38: error: reference to non-static member function must be called

热门文章

  1. Java之品优购课程讲义_day12(2)
  2. 【第10章】深入理解Session与Cookie
  3. Nginx静态资源POST请求返回405状态
  4. CXF开发WebService服务器端
  5. 汇编调用C函数--利用堆栈传递参数
  6. “新闻”频道“最新更新”有问题吗?
  7. Node.js 中 exports 和 module.exports 的区别
  8. actor对自己不可见
  9. js实现多个图片淡入淡出,框架
  10. 驰骋工作流引擎-自由表单