java reactor notify_荐spring的reactor 的异步事件驱动的介绍

上一章了guava的事件驱动机制eventbus,不过值得一提的是spring 也有个开源的异步事件驱动 reactor

github开源reactor

在介绍怎么使用前我想说的是我对事件驱动 并发 异步同步的理解,说实话 叫我定义 他是什么东西我也说不清,我的理解是

并发编程 基本有2种  一种是基于线程的  一种是基于事件驱动的 很多时候 我们用线程处理并发 也用事件驱动处理并发

线程容易理解 他是通过cpu缓存锁 以及线程共享同步来实现的,而事件驱动呢?我的理解是事件驱动 其实就是消息驱动 消息是信封,事件是信函 也就是事件的模式通过消息来传递,这样放大到上面的并发编程来看,也就是说本质上 那些JMS 消息中间件 是基于事件驱动的并发编程,只不过他是通过并发异步队列来作为共享区 解决了远程时间空间的问题,同理EJB 消息驱动bean 我的理解应该也是事件(消息)驱动的并发,甚至在后面我们讲的actor 模型 本质上我认为跟jms 这些消息中间件很相识,只是他不在采用并发队列共享数据,而是每一次通过发送消息实现交互。 以上只是我的理解  所以不一定正确。后面有时间我会讲到dispatcher 无锁并发框架 还有actor的角色模型的并发框架。

下面我们来讲reactor介绍

首页加入相关的依赖

reactor作为spring官方为了支持异步事件驱动而添加的库 他吸收了无锁编程的框架dispatcher的特性 同时能够完美的与spring整合 详细的介绍见外链网址已屏蔽

org.projectreactor

reactor-core

1.0.0.RELEASE

org.projectreactor

reactor-groovy

1.0.0.RELEASE

org.projectreactor

reactor-spring

1.0.0.RELEASE

第二步 配置spring,

由于官方没有xml的配置 所以我自己写了个

import reactor.core.Environment;

import reactor.core.Reactor;

import reactor.core.spec.Reactors;

public class InitService {

//

public static Reactor init(){

Reactor reactor=Reactors.reactor()

.env(new Environment())

.get();

return reactor;

}

}

当然这是简单的配置,大家可以init-method="init 构造函数 SPEL表达式 还有InitializingBean BeanPostProcessor FactoryBean

@PostConstruct

随你喜欢

第三部使用

这部分官方有个很好的教程外链网址已屏蔽

这里值得一说的就是 关键代码中

reactor.on($("jokes"), receiver);

reactor.notify("jokes", Event.wrap(counter.getAndIncrement()));

@Service

class Receiver implements Consumer> {

@Autowired

CountDownLatch latch;

RestTemplate restTemplate = new RestTemplate();

public void accept(Event ev) {

JokeResource jokeResource = restTemplate.getForObject("外链网址已屏蔽;, JokeResource.class);

System.out.println("Joke " + ev.getData() + ": " + jokeResource.getValue().getJoke());

latch.countDown();

}

import static reactor.event.selector.Selectors.$;

这个$()是导入的静态方法 ,也可以用Selectors.object( ) 这里accept 方法是接受消息,还有注意的是 A发给B b接受到了 可以回复A的

reactor.notify("jokes", Event.wrap(counter.getAndIncrement()),custormerA对象);

或者

使用

reactor.sendAndReceive(  )

还有就是reactor 支持传递多个类型字段 用 tuples ,还支持传递流 ,还有有状态的许诺 等等

这官方的wiki介绍的很详细,大家可以去看 所以这一章 只是上一节说道guava的eventbus  我突然想到reactor 所以顺带介绍下 这个reactor

想wiki中介绍 还有route方式  这些都类似与消息中间件 ,还有注解方式

@Component

public class HandlerBean {

@Autowired

@Qualifier("rootReactor")

private Reactor reactor;

@Selector("test.topic")

@ReplyTo("reply.topic")

public String handleTestTopic(Event evt) {

return "Hello World!";

}

}

@Selector(value="test.topic", reactor="@rootReactor")

public void handleTestTopic(Event evt) {

// handle the event

}

}

这些使用起来 很方便 ,重要的是终于给spring 弥补了不足,添加了事件驱动方面的内容  ,方便大家进行各种并发处理 各种网络通讯,高性能 的计算处理

这一章只是介绍章节 ,后面有时间更新下actor模型的思想。其实他跟消息中间件的事件驱动思想很相似 ,所以他没无所谓多线程 并发的概念 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值