Last active
November 7, 2019 03:38
-
-
Save mihkels/57c1b3f155c27f6d5d752d101b132cf1 to your computer and use it in GitHub Desktop.
RSocket with Spring Boot 2.2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
spring: | |
rsocket: | |
server: | |
port: 7000 | |
address: localhost |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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' | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@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) | |
); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@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)); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Data | |
@Builder | |
@AllArgsConstructor | |
@NoArgsConstructor | |
@FieldDefaults(level = AccessLevel.PRIVATE) | |
public class GreetingRequest { | |
String name; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Data | |
@Builder | |
@AllArgsConstructor | |
@NoArgsConstructor | |
@FieldDefaults(level = AccessLevel.PRIVATE) | |
public class GreetingResponse { | |
String greeting; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@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