1. IceBox与IceGrid集成

IceGrid可以很容易地配置IceBox服务端的一个或多个服务。

2. 部署一个IceBox服务端

IceBox服务端与其他服务端有许多相同的特性,但是它的特殊要求需要一个新的描述符。与其他服务端不同,IceBox服务端通常承载多个独立服务,每个服务都需要自己的communicator实例和配置文件。

例如,以下应用程序将部署包含一个服务的IceBox服务器:

<icegrid>
    <application name="IceBoxDemo">
        <node name="Node">
            <icebox id="IceBoxServer" exe="/opt/Ice/bin/icebox" activation="on-demand">
                <service name="ServiceA" entry="servicea:create">
                    <adapter name="${service}" endpoints="tcp"/>
                </service>
            </icebox>
        </node>
    </application>
</icegrid>

它看起来像一个服务端描述符。最大的区别就是服务描述符,它的构造很像一个服务端,所以你可以声明它的属性,如对象适配器和配置属性。服务的顺序决定了IceBox服务器加载的顺序。

适配器中name属性的值需要额外的解释。符号service是IceGrid保留的名称之一。在服务描述符的上下文中,${service}被替换为服务的名称,因此对象适配器也被命名为ServiceA

3. 服务模版

如果你熟悉普通的模版,IceBox服务模板就很容易理解:

<icegrid>
    <application name="IceBoxApp">
        <service-template id="ServiceTemplate">
            <parameter name="name"/>
            <service name="${name}" entry="DemoService:create">
                <adapter name="${service}" endpoints="default"/>
                <property name="${service}.Identity" value="${server}-${service}"/>
            </service>
        </service-template>
        <node name="Node1">
            <icebox id="IceBoxServer" endpoints="default"
                exe="/opt/Ice/bin/icebox" activation="on-demand">
                <service-instance template="ServiceTemplate" name="Service1"/>
            </icebox>
        </node>
    </application>
</icegrid>

在这个应用程序中,一个IceBox服务端部署在一个节点上,并且有一个从服务模板实例化的服务。特别有趣的是property描述符,它使用另一个保留名称server来形成属性值。当模板被服务实例描述符实例化时,符号${server}被替换为封闭服务端的名称,所以属性定义展开如下:

Service1.Identity=IceBoxServer-Service1

与服务端实例一样,你可以在不修改模板的情况下,为服务实例指定其他属性。这些属性可以在service-instance元素中定义,如下所示:

<icegrid>
    <application name="IceBoxApp">
        ...
        <node name="Node1">
            <icebox id="IceBoxServer"endpoints="default"
                exe="/opt/Ice/bin/icebox" activation="on-demand">
                <service-instance template="ServiceTemplate" name="Service1">
                    <properties>
                        <property name="Ice.Trace.Network" value="1"/>
                    </properties>
                </service-instance>
            </icebox>
        </node>
    </application>
</icegrid>

4. 高级服务模版

更复杂的模板使用,涉及在服务端模板中实例化服务模板:

<icegrid>
    <application name="IceBoxApp">
        <service-template id="ServiceTemplate">
            <parameter name="name"/>
            <service name="${name}" entry="DemoService:create">
                <adapter name="${service}" endpoints="default"/>
                <property name="${name}.Identity" value="${server}-${name}"/>
            </service>
        </service-template>
        <server-template id="ServerTemplate">
            <parameter name="id"/>
            <icebox id="${id}" endpoints="default"
                exe="/opt/Ice/bin/icebox" activation="on-demand">
                <service-instance template="ServiceTemplate" name="Service1"/>
            </icebox>
        </server-template>
        <node name="Node1">
            <server-instance template="ServerTemplate" id="IceBoxServer"/>
        </node>
    </application>
</icegrid>

这个应用程序相当于我们服务模板的第一个例子。但是,现在,在多个节点上部署相同的服务端的过程变得更加简单。

如果你需要自定义特定服务实例的配置,那么,你的服务端实例可以定义仅适用于所需服务的属性集:

<icegrid>
    <application name="IceBoxApp">
        <node name="Node1">
            <server-instance template="ServerTemplate" id="IceBoxServer">
                <properties service="Service1">
                    <property name="Ice.Trace.Network" value="1"/>
                </properties>
            </server-instance>
        </node>
    </application>
</icegrid>

如本例所示,属性集的service属性表示目标服务的名称。

Copyright © github.com/weiofcn 2017 all right reserved,powered by GitbookLast modified time: 2017-12-21 13:30:06

results matching ""

    No results matching ""