使用Gradle注册SpringXD的module

17 5月

SpringXD是Pivotal的大数据产品,提供了一个抽象的数据处理平台。

SpringXD将数据解决方案抽象为数据吸纳,分析,流调度和输出四大块。

作为源头的数据吸纳可以从各种数据源中获取需要的数据,基于Spring的另外一个项目spring-integration,这一部分的大部分实现都可以使用简单的dsl实现。

在SpringXD中每一个部分的组件都可以自己编写并注册到服务中,方便之后的使用。

但是在编写阶段每次都需要打包,上传服务器,然后注册,整个过程还是有点繁琐的。

Gradle作为一个构建工具,自然可以通过自定义任务完成这个任务。

微博数据吸纳

这里以微博的数据源为例。

微博的数据源因为新浪微博提供了sdk,所以自己编写稍微方便一些。

SpringXD项目默认也提供了twitter的两个source方便测试。

先看一下build.gradle的配置

ext {
xdVersion ='1.1.1.RELEASE'
springVersion ='4.1.3.RELEASE'
moduleType ='source'
moduleName ='weibo'
xdServer ="http://192.168.0.12:9393"
version ='0.0.1-SNAPSHOT'
}

最关键的配置变量是moduleType,moduleName和xdServer。

为了简单明了,WeiboSource并不具有配置参数(一般情况下都需要提供一些配置参数的,比如apiKey),主配置文件如下

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/integration"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<channel id="output"/>

<beans:bean class="com.huangyunkun.xd.WeiboSource">
<beans:property name="autoStartup" value="false"/>
<beans:property name="outputChannel" ref="output"/>
</beans:bean>

</beans:beans>

因为打包后配置需要也在jar中,在jar配置中增加

jar {
from("modules/${moduleType}/${moduleName}/config") {
into"config"
}
}

注册到SpringXD

SpringXD提供了一套Restful的api用于常用的操作,比如stream的管理,容器状态等。

xd shell也是调用了这个接口,也有java的实现。

在build.gradle中加入

buildscript {
repositories {
jcenter()
}
dependencies {
classpath('org.springframework.xd:spring-xd-rest-client:+')
}
}

新定义一个任务reg

task reg(dependsOn: jar) << {
SpringXDTemplatetemplate = newSpringXDTemplate(newURI(xdServer));
ModuleOperations moduleOperations =template.moduleOperations();
moduleOperations.uploadModule(moduleName,RESTModuleType.valueOf(moduleType), new
FileSystemResource(jar.archivePath.path),true);
}

然后执行gradlew reg即可注册成功。

注册成功

注册成功后就可以正常使用了

创建新的stream
stream输出

当然管理界面也可以看到相关信息

管理界面

其他问题

  • 这种注册方式是强制的,也就是说如果有同名source就会被覆盖。

  • 因为Module的类型是通过RESTModuleType.valueOf(moduleType)获取的,所以也可以这样注册sink等其他类型的模块。

  • 如果有对应的module正在被使用,那么是没法重新注册的。

发表评论

电子邮件地址不会被公开。