Spring Reactor使用(1)

Spring Reactor使用(1)

七月 25, 2019

简单使用

不做说明,仅记录代码及使用

Code

src/…/reactor/config/ReactorConfig.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@Component
public class ReactorConfig {

@Bean
Environment env() {
return new Environment();
}

@Bean
@Primary
Reactor pool(Environment env) {
return Reactors.reactor()
.env(env)
.dispatcher(Environment.THREAD_POOL)
.get();
}

@Bean
Reactor loop(Environment env) {
return Reactors.reactor()
.env(env)
.dispatcher(Environment.EVENT_LOOP)
.get();
}
}

src/…/reactor/ReactorListener.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Component
public class ReactorListener implements InitializingBean {

@Autowired
Reactor reactor;

@Autowired
UserHandler userHandler;

@Override
public void afterPropertiesSet() throws Exception {

reactor.on($("userHandler"), userHandler);
}
}

src/…/reactor/handler/UserHandler.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Component
public class UserHandler implements Consumer<Event<UserDto>> {

@Autowired
UserMapper userMapper;

@Override
public void accept(Event<UserDto> userDtoEvent) {

try {
UserDto user = userDtoEvent.getData();
user = userMapper.getUser(user.getId());
log.info("in userHandler: user={}", user);
} catch(Exception e) {
log.error(String.valueOf(e));
}
}
}

使用

controller

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class UserController {

@Autowired
Reactor reactor;

@Autowired
IUserService userService;

@PostMapping("/get")
public UserDto getUser(Integer uid) {

UserDto userDto = new UserDto();
userDto.setId(uid);

reactor.notify("userHandler", Event.wrap(userDto));
return userService.getUser(uid);
}
}