Skip to content

Instantly share code, notes, and snippets.

@mihkels
Last active November 7, 2019 03:38
Show Gist options
  • Save mihkels/57c1b3f155c27f6d5d752d101b132cf1 to your computer and use it in GitHub Desktop.
Save mihkels/57c1b3f155c27f6d5d752d101b132cf1 to your computer and use it in GitHub Desktop.
RSocket with Spring Boot 2.2
spring:
rsocket:
server:
port: 7000
address: localhost
// Dependencies section from build file
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-rsocket'
implementation 'org.springframework.boot:spring-boot-starter-webflux'
// OPTIONAL: only if you want to use Lombok in your project
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
}
@RestController
@RequiredArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true)
public class GreetingConsumerController {
Mono<RSocketRequester> requester;
@GetMapping("/greet/{name}")
public Publisher<GreetingResponse> greet(@PathVariable String name) {
return requester.flatMap(req -> req.route("greet")
.data(GreetingRequest.builder().name(name).build())
.retrieveMono(GreetingResponse.class)
);
}
}
@Controller
public class GreetingProducerController {
@MessageMapping("greet")
Mono<GreetingResponse> greet(GreetingRequest request) {
return Mono.just(new GreetingResponse("Hello " + request.getName() + " @ " + Instant.now()));
}
@MessageMapping("greet-stream")
Flux<GreetingResponse> greetStream(GreetingRequest request) {
return Flux.fromStream(Stream.generate(
() -> new GreetingResponse("Hello " + request.getName() + " @ " + Instant.now())
)).delayElements(Duration.ofSeconds(1));
}
}
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class GreetingRequest {
String name;
}
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class GreetingResponse {
String greeting;
}
@Configuration
@RequiredArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true)
public class RSocketConfiguration {
RSocketProperties properties;
@Bean
Mono<RSocketRequester> rSocketRequester(RSocketRequester.Builder builder) {
return builder.connectTcp("127.0.0.1", properties.getServer().getPort());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment