Spring Reactor使用(1)

333 阅读1分钟

简单使用

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

Code

src/.../reactor/config/ReactorConfig.java

@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

@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

@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

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);
    }
}