@ -2930,31 +2930,9 @@ You can learn more about the resource configuration on the client side in the <<
@@ -2930,31 +2930,9 @@ You can learn more about the resource configuration on the client side in the <<
https://rsocket.io[RSocket] is a binary protocol for use on byte stream transports.
It enables symmetric interaction models via async message passing over a single connection.
Spring Framework, with the Spring Messaging module supports RSocket both on the server and the client side.
On the server side, it lets you create special `@Controller` beans to handle incoming RSocket messages.
Methods in your controller are mapped to RSocket routes by using `@MessageMapping` annotations.
The following code shows a typical `@Controller`:
[source,java,indent=0]
----
@Controller
public class MyRSocketController {
@MessageMapping("chat.room.{name}")
public Flux<ChatMessages> enterChatRoom(@DestinationVariable String chatRoom,
The `spring-messaging` module of the Spring Framework provides support for RSocket requesters and responders, both on the client and on the server side.
See the {spring-framework-docs}web-reactive.html#rsocket-spring[RSocket section] of the Spring Framework reference for more details, including an overview of the RSocket protocol.
@ -2966,21 +2944,21 @@ By default, the auto-configuration will try to configure the following (in order
@@ -2966,21 +2944,21 @@ By default, the auto-configuration will try to configure the following (in order
. JSON codecs with Jackson
The `spring-boot-starter-rsocket` starter provides both dependencies.
Check out the <<boot-features-json-jackson,Jackson support section>> to know more about customization possibilities.
Developers can customize the `RSocketStrategies` component by creating beans that implement the `RSocketStrategiesCustomizer` interface.
Note that their `@Order` is important, as it determines the order of codecs.
Spring Boot provides auto-configuration for RSocket servers.
Spring Boot provides RSocket server auto-configuration.
The required dependencies are provided by the `spring-boot-starter-rsocket`.
Spring Boot will start an RSocket server as a new embedded server in your application, or will plug the RSocket infrastructure into an existing reactive Web server.
Spring Boot allows exposing RSocket over WebSocket from a WebFlux server, or standing up an independent RSocket server.
This depends on the type of application and its configuration.
In case of a WebFlux application (i.e. of type `WebApplicationType.REACTIVE`), the RSocket server will be plugged into the existing Web Server only if the following properties match:
For WebFlux application (i.e. of type `WebApplicationType.REACTIVE`), the RSocket server will be plugged into the Web Server only if the following properties match:
@ -2989,9 +2967,9 @@ In case of a WebFlux application (i.e. of type `WebApplicationType.REACTIVE`), t
@@ -2989,9 +2967,9 @@ In case of a WebFlux application (i.e. of type `WebApplicationType.REACTIVE`), t
#spring.rsocket.server.port= # no port is defined
----
WARNING: Plugging RSocket into an existing web server is only supported with Reactor Netty, as RSocket itself is built with that library.
WARNING: Plugging RSocket into a web server is only supported with Reactor Netty, as RSocket itself is built with that library.
The only other way to create an RSocket server is to start an independent, embedded RSocket server.
Alternatively, an RSocket TCP or websocket server is started as an independent, embedded server.
Besides the dependency requirements, the only required configuration is to define a port for that server:
@ -3006,23 +2984,19 @@ Besides the dependency requirements, the only required configuration is to defin
@@ -3006,23 +2984,19 @@ Besides the dependency requirements, the only required configuration is to defin
=== Spring Messaging RSocket support
Spring Boot will auto-configure the Spring Messaging infrastructure for RSocket.
An `RSocketStrategies` bean is created to provide encoding and decoding support for RSocket messages.
By default, Spring Boot will try to auto-configure JSON support with Jackson for `application/json` and `"application/*+json"` media types.
Check out the <<boot-features-json-jackson,Jackson support section>> to know more about customization possibilities.
Developers can create `RSocketStrategiesCustomizer` beans to add other strategies, assuming there are `Encoder` and `Decoder` implementations available.
This means that Spring Boot will create a `RSocketMessageHandler` bean that will handle RSocket requests to your application.
[[boot-features-rsocket-requester]]
=== Calling RSocket Services with `RSocketRequester`
Once the `RSocket` channel is established between server and client, any party can send or receive requests to the other.
As a server, you can get injected an `RSocketRequester` instance on any handler method of an RSocket `@Controller`.
As a server, you can get injected with an `RSocketRequester` instance on any handler method of an RSocket `@Controller`.
As a client, you need to configure and establish an RSocket connection first.
Spring Boot auto-configures an `RSocketRequester.Builder` for such cases with the expected codecs.
The `RSocketRequester.Builder` instance is a prototype bean, meaning each injection point will provide you with a new instance - this is done on purpose since this builder is stateful and you shouldn't create requesters with different setups using the same instance.
The `RSocketRequester.Builder` instance is a prototype bean, meaning each injection point will provide you with a new instance .
This is done on purpose since this builder is stateful and you shouldn't create requesters with different setups using the same instance.
The following code shows a typical example:
@ -3035,7 +3009,7 @@ The following code shows a typical example:
@@ -3035,7 +3009,7 @@ The following code shows a typical example:
public MyService(RSocketRequester.Builder rsocketRequesterBuilder) {