Demo with Spring Messaging RSocket and Spring Boot 2.2.0.M5(spring-boot-starter-rsocket).
- Jdk 1.8+
- Spring Framework 5.2.0
- Spring Boot 2.2.0.RC1
- RSocketRequester: RSocket Requester, almost like WebClient for HTTP.
- account-common: shared library for RSocket responder & requester
- rsocket-responder: supply RSocket services
- rsocket-requester: consume RSocket services
- rsocket-react-demo: call rsocket service from browser
- Create a Reactive service interface like following
public interface AccountService {
Mono<Account> findById(Integer id);
Flux<Account> findAll();
}
- On responder side: implement Service Interface and create a RSocket Controller, for example AccountRSocketController. In future you can use code generation strategy.
@Controller
public class AccountRSocketController {
@Autowired
private AccountService accountService;
@MessageMapping("org.mvnsearch.account.AccountService.findById")
public Mono<Account> findById(Integer id) {
return accountService.findById(id);
}
@MessageMapping("org.mvnsearch.account.AccountService.findById.{id}")
public Mono<Account> findById2(@DestinationVariable Integer id) {
return accountService.findById(id);
}
@MessageMapping("org.mvnsearch.account.AccountService.findAll")
public Flux<Account> findAll() {
return accountService.findAll();
}
}
- On requester side: use RSocketRemoteServiceBuilder to build service call stub bean.
@Configuration
public class RSocketConfiguration {
@Bean
public RSocket rsocket() {
return RSocketFactory.connect()
.dataMimeType(MimeTypeUtils.APPLICATION_JSON_VALUE)
.transport(TcpClientTransport.create("localhost", 42252))
.start()
.block();
}
@Bean
public RSocketRequester rsocketRequester(RSocket rSocket, RSocketStrategies strategies) {
return RSocketRequester.create(rSocket, MimeTypeUtils.APPLICATION_JSON, strategies);
}
@Bean
public AccountService accountService(RSocketRequester rsocketRequester) {
return RSocketRemoteServiceBuilder.client(rsocketRequester, AccountService.class).build();
}
}
Please refer rsocket-react-demo for RSocket and React integration.
- Option to customize or mutate existing RSocketStrategies: spring-projects/spring-framework#22799
- Add coroutines support to RSocket @MessageMapping and RSocketRequester: spring-projects/spring-framework#22780