Reactor、Disruptor

Reactor
主要用于帮助开发者创建基于JVM的异步应用程序。该框架提供了Java、Groovy等JVM语言的抽象,使得开发者构建事件/数据驱动的应用程序更加容易。

Reactor开发人员称,在适度的硬件配置环境中,通过非阻塞的Dispatcher,该框架每秒可以处理超过1500万事件。此外,Reactor还提供了一系列其他的调度程序供开发者选择,范围从线程池风格的长线任务执行,到非阻塞大批量的任务调度等。

Reactor除了受到同名的Reactor设计模式的影响外,还借鉴了其他事件驱动设计模式以及一些已开发多年的非常棒的JVM解决方案。Reactor的目标是,将这些想法和设计模式浓缩到一个简单、可重用的基础框架中,以使事件驱动编程更容易。

以下转自 http://www.hack6.com/html/bc/java/20140401/43395.html
最近工作中用到一个非常好用的框架spring reactor,可以帮助我们新开一个异步的线程来处理一些比如记录日志的功能,这样就能节约后台相应的时间,之前在网上也没有找到完全能用的列子,这里记录一下,方便以后用,配置也非常的简单:

1:引入jar包,这里使用的是maven,只需要引用一个jar包就行了

<dependency>
    <groupid>org.projectreactor</groupid>
    reactor-spring</artifactid>
    <version>1.0.0.RELEASE</version>
</dependency>


2:写一个reactor的配置的bean

@Configuration
@EnableReactor
public class ReactorConfig {

    @Bean(name = "rootReactor")
    public Reactor rootReactor(Environment env) {
        return Reactors.reactor().env(env).get();
    }

    @Bean(name = "reportReactor")
    public Reactor reportReactor(Environment env) {
        return Reactors.reactor().env(env).get();
    }

}


3:事件的处理类,一般是以Hander结尾,方便区分:

@Component
public class IndexHandler {

    @Autowired
    @Qualifier("rootReactor")
    private Reactor reactor;

    @Selector(value = "hello", reactor = "@rootReactor")
    public void handleTestTopic(Event<string> evt) throws Exception {
        System.out.println("************");
    }
}</string>


4:最后就是在controller或者service里面通知新开线程了:

@Controller
public class IndexController {

    @Autowired
    @Qualifier("rootReactor")
    private Reactor r;

    @RequestMapping("chen")
    @Transactional
    public void chen() {
        r.notify("hello", Event.wrap("你好"));
    }
}


大功告成,非常的简单

猜你喜欢

转载自haidaoqi3630.iteye.com/blog/2294266