我正在处理的应用程序大量使用异步处理,我正在寻找一种更好的方法来组织代码。
在servlet上接收系统的外部输入。此servlet收集的原始数据存入队列。线程池针对此队列运行,并将原始数据解析为结构化记录,然后将其存入一组N个队列中的一个。选择队列使得所有相同类型的记录进入同一队列。这些N个队列由每个单独的线程提供服务,它们将相同类型的记录收集到一个集合中。每一分钟,一个预定的任务就会被唤醒,并将每种类型的前一分钟收集的所有记录写入文件。
目前,此代码是使用一堆队列,线程池和不断运行的runnables组织的,这使得逻辑很难遵循。我想将此代码重构为上述数据流更明确的内容。我正在寻找实现这一目标的工具和方法。
答案 0 :(得分:2)
根据您的描述,这是RxJava的示例。希望它会对你有所帮助。
public class TestServlet extends HttpServlet {
private static final PublishSubject<String> o = PublishSubject.<String>create();
public static Observable<String> getServletObservable() {
return o.observeOn(Schedulers.computation());
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
synchronized (TestServlet.class) {
o.onNext("value");
}
}
}
class Foo {
public static void main(String[] args) {
TestServlet.getServletObservable().map(new Func1<String, String>() {
@Override
public String call(String t1) {
// do something
return null;
}
}).groupBy(new Func1<String, String>() {
@Override
public String call(String t1) {
// do something
return null;
}
}).subscribe(new Observer<GroupedObservable<String, String>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(GroupedObservable<String, String> group) {
group.observeOn(Schedulers.io()).subscribe(new Observer<String>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(String t) {
// store t
}
});
}
});
}
}