我正在尝试使用阻塞队列中的数据。需要在run方法中实现consume方法。 我有以下代码需要在run方法
中实现 @Override
public String consume(String lastSourceOffset, int maxBatchSize, BatchMaker batchMaker) throws StageException {
long nextSourceOffset = 0;
if (lastSourceOffset != null) {
nextSourceOffset = Long.parseLong(lastSourceOffset);
}
if (queue.size() != 0) {
Record record = getContext().createRecord("some-id::" + nextSourceOffset);
Map<String, Field> map = new HashMap<>();
try {
map.put("fieldName", Field.create(queue.take()));
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
record.set(Field.create(map));
batchMaker.addRecord(record);
++nextSourceOffset;
}
return String.valueOf(nextSourceOffset);
}
我试图让上面的方法在下面运行&#34;运行方法&#34;
@Override
public void run() {
// TODO Auto-generated method stub
}
我有什么方法可以称之为。
答案 0 :(得分:2)
你可以创建一个类构造函数来接受如下参数:
public class ConsumeRunner implements Runnable{
String lastSourceOffset;
int maxBatchSize;
BatchMaker batchMaker;
public ConsumeRunner(String lastSourceOffset, int maxBatchSize, BatchMaker batchMaker)
{
this.lastSourceOffset=lastSourceOffset;
this.maxBatchSize=maxBatchSize;
this.batchMaker=batchMaker;
}
@Override
public void run() {
consume(lastSourceOffset, maxBatchSize, batchMaker);
}
}
您正常构造线程,除了no-args构造函数之外,您使用新的自定义线程。否则运行它是一样的。