Fig

流水线式开发框架
授权协议 Mulan
开发语言 Java HTML/CSS
所属分类 程序开发、 作业/任务调度
软件类型 开源软件
地区 国产
投 递 者 穆招
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

Fig(无花果)是一个根据多任务流水线模型开发的运行框架,框架多任务并发使用的java的线程池进行控制,使用队列实现任务间的数据传递

预览版 仓库 地址:https://oss.sonatype.org/content/repositories/snapshots
   maven 依赖 :

<dependency>
  <groupId>com.github.taomus.fig</groupId>
  <artifactId>fig-core</artifactId>
  <version>0.1.0-SNAPSHOT</version>
  <type>module</type>
</dependency>

<dependency>
  <groupId>com.github.taomus.fig</groupId>
  <artifactId>fig-spring-plugin</artifactId>
  <version>0.1.0-SNAPSHOT</version>
  <type>module</type>
</dependency>

 Xtend 代码实例:           

package com.github.test1.stock

import com.github.taomus.fig.core.engine.Data
import com.github.taomus.fig.core.engine.Fig
import com.github.taomus.fig.core.engine.FigEngine
import com.github.taomus.fig.core.engine.Task
import com.github.test.stock.entity.StockData
import java.nio.charset.Charset
import java.util.Arrays
import java.util.Vector
import joinery.DataFrame
import org.apache.commons.lang3.SerializationUtils
import org.jsoup.Connection
import org.jsoup.Jsoup
import org.slf4j.LoggerFactory
import org.springframework.util.StreamUtils

class CollectStock1 extends Fig {
	val static LOG = LoggerFactory.getLogger(CollectStock1)
	
	def static void main(String[] args){
		FigEngine.instance.addModule(CollectStock1)
		FigEngine.instance.run()
		FigEngine.instance.taskQueue.put(Data.create("start",null))
	}
	
	def String getUrl(String code,String date) {
		if (code.startsWith("0")) {
			return ''' http://quotes.money.163.com/service/chddata.html?code=1«code»&start=«date»0101&end=«date»1231
			'''
		} else {
			return ''' http://quotes.money.163.com/service/chddata.html?code=0«code»&start=«date»0101&end=«date»1231
			'''
		}
	}

	@Task("start")
	def Data[] getStockCodes(Data value){
		return #[
			Data.create("buildData",new StockData("平安银行","000001")),
			Data.create("buildData",new StockData("万科A","000002"))
		]
	}
	
	@Task("buildData")
	def Data[] collect(Data value){
		var stockinfo = value.getData as StockData
		var results = new Vector<Data>();
		for(date:2000..2020){
			var info = SerializationUtils.<StockData>clone(stockinfo)
			info.date = String.valueOf(date)
			results.add(Data.create("stock_history",info))
		}
		return results
	}

	@Task("stock_history")
	def Data startHistory(Data value) {
		var d = value.getData() as StockData
		var String url = getUrl(d.code,d.date)
		LOG.info(url)
		var Connection connection = Jsoup.connect(url);
		var Connection.Response response = connection.method(Connection.Method.GET).ignoreContentType(true).timeout(10 *
			1000).execute();
		var a = StreamUtils.copyToString(response.bodyStream, Charset.forName("UTF-8"))
		LOG.info(a)
		var data = a.split("\n")
		if(data.size == 1){
			return null
		}
		var DataFrame<Object> df = new DataFrame("日期", "股票代码", "名称", "收盘价", "最高价", "最低价", "开盘价", "前收盘", "涨跌额", "涨跌幅",
			"换手率", "成交量", "成交金额", "总市值", "流通市值", "成交笔数");
		for(index : 1..data.length-1){
			df.append(Arrays.asList(data.get(index).split(',')))
		}
		var results = new Vector();
		var indexs = df.index();
		for (Object index : indexs) {
			var sd = new StockData()
			sd.date = df.get(index,"日期") as String
			sd.code = df.get(index,"股票代码") as String
			sd.code = sd.code.substring(1)
			sd.name = d.name
			sd.opening = Float.valueOf(df.get(index,"开盘价") as String)
			sd.ending = Float.valueOf(df.get(index,"收盘价") as String)
			sd.low = Float.valueOf(df.get(index,"最低价") as String)
			sd.hig = Float.valueOf(df.get(index,"最高价") as String)
			results.add(sd)
		}
		var resdata = Data.create("calc",results.reverse);
		resdata.priority = 2
		return resdata
	}
	
	@Task("calc")
	def Data calc(Data value) {
		return null;
	}	
}

 

 相关资料
  • 有人可以通过添加到我已经编码的内容来帮助我设计解决方案吗?或者向我指出一个已经存在的模式来解决这个问题?

  • 流水线功能提供给用户统一的视图来管理应用自动发布规则,您可通过此功能来自动发布自有主机或DCE混合云环境下的应用 设置自动发布规则 进入构建项目页,选择流水线 点击右侧 development 面板中的添加一个新应用, 输入应用的名字,我们可以搜索到使用该项目的应用 点击应用的“设置发布规则”来设置自动部署规则。 根据此规则,当源码的 master 分支更新时会自动触发CI与构建,并自动发布新版本

  • 主要内容:实例,实例,实例,实例,实例,实例关键词:流水线,乘法器 硬件描述语言的一个突出优点就是指令执行的并行性。多条语句能够在相同时钟周期内并行处理多个信号数据。 但是当数据串行输入时,指令执行的并行性并不能体现出其优势。而且很多时候有些计算并不能在一个或两个时钟周期内执行完毕,如果每次输入的串行数据都需要等待上一次计算执行完毕后才能开启下一次的计算,那效率是相当低的。流水线就是解决多周期下串行数据计算效率低的问题。 流水线 流水线的基

  • 问题内容: 我必须用Java实现HTTP客户端,并且出于我的需要,似乎最有效的方法是实现HTTP管道(按照RFC2616)。 顺便说一句,我想管道POST。(我也不在谈论多路复用。我在谈论流水线,即在接收到任何HTTP请求的响应之前,通过一个连接发送许多请求) 我找不到明确声明其支持流水线的第三方库。但是我可以使用例如Apache HTTPCore 来构建这样的客户端,或者如果需要的话,可以自己构

  • 问题内容: 因此,我想使用node.js和http请求管道,但是我只想将HTTP用作传输方式,而没有其他用途。我对利用请求流水线功能感兴趣。但是,我遇到的一个问题是,在发送对前一个请求的响应之前,节点不会触发下一个请求的回调。我想要一种能够做到这一点的方法。我将在应用程序中处理结果的排序。有没有办法做到这一点? HTTP RFC提到响应应该井井有条,但是我看不出有任何理由让node.js在响应第一

  • 利用流水线(pipeline)的方式从client打包多条命令一起发出,不需要等待单条命令的响应返回,而redis服务端会处理完多条命令后会将多条命令的处理结果打包到一起返回给客户端: cat data.txt | redis-cli –pipe 在选择开源redis开发库时需要着重注意是否支持pipeline,常见的jedis可以支持。 在部署架构是网络多跳的时候需要注意使用pipeline提高