Reactor: Spring发布基于JVM的异步事件驱动框架

面对Vert.x 以及Erlang/Scala的Actor模型冲击,Spring今天最新宣布,推出基于事件驱动的异步应Reactor:

Reactor 是一个提供Java Groovy或其他JVM语言建立事件和数据驱动更容易的框架。它很快,可以每秒处理15,000,000以上事件,无堵塞non-blocking分发. 长任务运行无堵塞
项目:https://github.com/reactor/reactor.

Reactor 是受到著名的 Reactor设计模式(本站Reactor文章)影响,当然也受到EDA事件驱动实践的影响,Reactor目标是让EDA更加容易方便使用。

使用代码案例:


// Use a POJO as an event handler
class Service {
public <T> void handleEvent(Event<T> ev) {
// handle the event data
}
}

@Inject
Service service;

// Use a method reference to create a Consumer<Event<T>>
reactor.on($(
"parse"), service::handleEvent);

// Notify consumers of the 'parse' topic that data is ready
// by passing a Supplier<Event<T>> in the form of a lambda
reactor.notify(
"parse", () -> {
slurpNextEvent()
});


[该贴被admin于2013-05-14 10:52修改过]

关于Reactor的评论:
/Heavy/Event/g Machine Gun 重机枪?

Reactor is an eventing system for big and fast data apps Reactor适合大且快速的数据应用。

Reactor的事件分发有多种选择:Promise vs Callback - Actor vs ThreadPool

结合websocket 每秒处理几百万事件。

Banq好快啊。才在SpringSource上看到,这里就有了,不知道和Vert.x相比如何。
不过才刚开始,真要用,估计需要2-3年才行。
[该贴被lshoo于2013-05-14 15:53修改过]

2013-05-14 15:49 "@lshoo
"的内容
不知道和Vert.x相比如何 ...

这里是最新第四回合各种语言框架包括Go语言 Scala等性能大比拼:
http://www.jdon.com/45396

基本上Netty Vert.x和原生Servlet胜出,在full stack中Spring还是最快的,估计Reactor和Vert.x差不多。

我认为直接采取NIO的tomcat 6/7提供的Servlet应该属于原生Servlet。这时一个Servlet线程应该相当于一个Event Handler。
[该贴被banq于2013-05-14 15:58修改过]

2013-05-14 15:57 "@banq
"的内容

基本上Netty Vert.x和原生Servlet胜出,在full stack中Spring还是最快的,估计Reactor和Vert.x差不多。 ...

Scalatra 性能不比Spring差,更简单,更方便。

Reactor意义在于:Spring用户可以使用Reactor开发出DDD + EventSourcing + CQRS的高并发异步应用程序了。

我们在这里讨论CQRS等等,Spring用户一直未能付诸实现,见:DDD项目现在实施的问题:http://www.jdon.com/44823

关注,蛮深的。

DCI, EventSourcing此类思维在fp中很容易实现,所以Reactor也是用Java8来实现的,离实际应用估计还有2-3年时间。