搭建领域空间信息服务集群 |
采用 SuperMap iServer 的分布式层次集群技术,可以将多个高性价比的低档服务器联合起来达到高端服务器的计算能力。启用集群服务,将一个 GIS 应用加入该集群服务,即构建了一个简单的集群。
SuperMap iServer 不仅可以将默认的地图、数据服务集群,还能将用户扩展开发领域空间信息服务(以下简称 DSS)进行集群。
DSS 由领域组件和服务接口构建而成,为保证 DSS 正确集群,需要开发者在开发领域组件的时候实现@Component 注记的 nameMapping 元素,nameMapping 元素指定了一个 com.supermap.services.components.NameMapping 接口的实现类,该实现类用于提取服务组件的服务能力。
NameMapping 接口有一个方法,即 getNames(Object object),用于从服务组件(object)中提取服务能力,返回值类型为 List<String>,具有相同服务能力的 DSS 在 SuperMap iServer 集群中被负载均衡,共同提供服务能力。
DSS 集群的配置过程跟默认的集群一样,可以在 SuperMap iServer 的 WebManager 中进行,在多台机器上部署好 DSS 后,选定一台作为集群服务器(即在“集群>启用集群服务”选项卡中启用集群),其他机器加入该集群服务器(即在“集群>加入集群”选项卡中添加项集群服务报告的报告器)即可。
以天气查询 DSS 为例(参见:%SuperMap iServer_HOME%\samples\code\Temprature_JSR 工程),将天气查询 DSS 进行集群。
实现一个 CityNameMapping(实现了 NameMapping 接口),配置到 com.supermap.sample.temperature.Temperature(服务组件),用于提取该 DSS 服务的服务能力,如下:
@Component(providerTypes={MapProvider.class, TemperatureProvider.class}, optional=false,nameMapping=CityNameMapping.class) public class Temperature implements ComponentContextAware{ …… }
有关 Component 注记的详细说明,请参见 Javadoc:com.supermap.services.components.Component。CityNameMapping 的实现如下:
/** * <p> * 城市名称映射接口,用于提取“温度组件”中的信息,这里提取的是可提供预报的城市名称。 * </p> */ public class CityNameMapping implements NameMapping { @Override public List<String> getNames(Object object) { if(object instanceof Temperature) { return ((Temperature)object).getCityNames(); } else { return new ArrayList<String>(); } } }
天气查询 DSS 这里,选取了可提供天气预报的城市名称作为 DSS 服务能力的标识,通过服务组件的 Temperature.getCityNames()方法获得。
将同样服务能力的天气查询 DSS 部署到两个 SuperMap iServer 服务器——C1、S1,访问:“http://C1:8090/iserver/services/Temperature/restjsr/北京”和“http://S1:8090/iserver/services/Temperature/restjsr/北京”都能获取“北京”的天气预报,结果如下(C1为例):
C1作为集群服务器,S1作为子节点,构建一个简单的集群。访问 http://C1:8090/iserver/services/manager,打开 C1的 WebManager,在“集群>启用集群服务”选项卡中点击“启用集群”按钮,启用 C1的集群服务;打开 S1的 WebManager,在“集群>加入集群”选项卡点击“添加报告器”,报告地址为:http://C1:8090/iserver/services/cluster,向 C1报告。至此,即完成天气查询 DSS 集群的搭建。
完成集群的搭建后,访问 C1的天气查询服务,例如:“http://C1:8090/iserver/services/Temperature/restjsr/北京”,就会使用到 C1、S1两个服务器提供的服务(可以访问多次,检查 S1缓存目录的内容来验证)。