MyCoordinator 1
package com.sxt.storm.transactional; import java.math.BigInteger; import backtype.storm.transactional.ITransactionalSpout; import backtype.storm.utils.Utils; public class MyCoordinator implements ITransactionalSpout.Coordinator<MyMeta>{ // batch中消息条数 public static int BATCH_NUM = 10 ; /** * 在initializeTransaction前执行 * 确认数据源是否已经准备就绪,可以读取数据 * 返回值 true、false */ @Override public boolean isReady() { Utils.sleep(2000); return true; } /** * txid:事务序列号 * prevMetadata:之前事务的元数据(如果第一次启动事务,则为null) * 返回值:当前事务的元数据 */ @Override public MyMeta initializeTransaction(BigInteger txid, MyMeta prevMetadata) { long beginPoint = 0; if (prevMetadata == null) { beginPoint = 0 ; }else { beginPoint = prevMetadata.getBeginPoint() + prevMetadata.getNum() ; } MyMeta meta = new MyMeta() ; meta.setBeginPoint(beginPoint); meta.setNum(BATCH_NUM); System.err.println("启动一个事务:"+meta.toString()); return meta; } @Override public void close() { } }