Skip to content

Commit 64f3dbb

Browse files
committed
Polish in rsocket package
1 parent aaeabc3 commit 64f3dbb

File tree

5 files changed

+51
-42
lines changed

5 files changed

+51
-42
lines changed

spring-messaging/src/main/java/org/springframework/messaging/rsocket/DefaultRSocketRequesterBuilder.java

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
* Default implementation of {@link RSocketRequester.Builder}.
3535
*
3636
* @author Brian Clozel
37+
* @author Rossen Stoyanchev
3738
* @since 5.2
3839
*/
3940
final class DefaultRSocketRequesterBuilder implements RSocketRequester.Builder {
@@ -76,29 +77,36 @@ public Mono<RSocketRequester> connectWebSocket(URI uri) {
7677

7778
@Override
7879
public Mono<RSocketRequester> connect(ClientTransport transport) {
79-
return Mono.defer(() -> {
80-
RSocketStrategies strategies = getRSocketStrategies();
81-
MimeType dataMimeType = getDefaultDataMimeType(strategies);
82-
83-
RSocketFactory.ClientRSocketFactory factory = RSocketFactory.connect();
84-
if (dataMimeType != null) {
85-
factory.dataMimeType(dataMimeType.toString());
86-
}
87-
this.factoryConfigurers.forEach(configurer -> configurer.accept(factory));
88-
89-
return factory.transport(transport).start()
90-
.map(rsocket -> new DefaultRSocketRequester(rsocket, dataMimeType, strategies));
91-
});
80+
return Mono.defer(() -> doConnect(transport));
81+
}
82+
83+
private Mono<RSocketRequester> doConnect(ClientTransport transport) {
84+
RSocketStrategies rsocketStrategies = getRSocketStrategies();
85+
RSocketFactory.ClientRSocketFactory rsocketFactory = RSocketFactory.connect();
86+
87+
// 1. Apply default settings
88+
MimeType dataMimeType = getDefaultDataMimeType(rsocketStrategies);
89+
if (dataMimeType != null) {
90+
rsocketFactory.dataMimeType(dataMimeType.toString());
91+
}
92+
93+
// 2. Application customizations
94+
this.factoryConfigurers.forEach(c -> c.accept(rsocketFactory));
95+
96+
return rsocketFactory.transport(transport).start()
97+
.map(rsocket -> new DefaultRSocketRequester(rsocket, dataMimeType, rsocketStrategies));
9298
}
9399

94100
private RSocketStrategies getRSocketStrategies() {
95-
if (this.strategiesConfigurers.isEmpty()) {
101+
if (!this.strategiesConfigurers.isEmpty()) {
102+
RSocketStrategies.Builder builder =
103+
this.strategies != null ? this.strategies.mutate() : RSocketStrategies.builder();
104+
this.strategiesConfigurers.forEach(c -> c.accept(builder));
105+
return builder.build();
106+
}
107+
else {
96108
return this.strategies != null ? this.strategies : RSocketStrategies.builder().build();
97109
}
98-
RSocketStrategies.Builder strategiesBuilder = this.strategies != null ?
99-
this.strategies.mutate() : RSocketStrategies.builder();
100-
this.strategiesConfigurers.forEach(configurer -> configurer.accept(strategiesBuilder));
101-
return strategiesBuilder.build();
102110
}
103111

104112
@Nullable

spring-messaging/src/main/java/org/springframework/messaging/rsocket/MessageHandlerAcceptor.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import io.rsocket.SocketAcceptor;
2525
import reactor.core.publisher.Mono;
2626

27+
import org.springframework.core.io.buffer.DataBufferFactory;
2728
import org.springframework.lang.Nullable;
2829
import org.springframework.messaging.Message;
2930
import org.springframework.util.MimeType;
@@ -78,11 +79,9 @@ private MessagingRSocket createRSocket(ConnectionSetupPayload setupPayload, RSoc
7879
MimeType dataMimeType = StringUtils.hasText(setupPayload.dataMimeType()) ?
7980
MimeTypeUtils.parseMimeType(setupPayload.dataMimeType()) :
8081
this.defaultDataMimeType;
81-
return new MessagingRSocket(this::handleMessage,
82-
route -> getRouteMatcher().parseRoute(route),
83-
RSocketRequester.wrap(rsocket, dataMimeType, getRSocketStrategies()),
84-
dataMimeType,
85-
getRSocketStrategies().dataBufferFactory());
82+
RSocketRequester requester = RSocketRequester.wrap(rsocket, dataMimeType, getRSocketStrategies());
83+
DataBufferFactory bufferFactory = getRSocketStrategies().dataBufferFactory();
84+
return new MessagingRSocket(this, getRouteMatcher(), requester, dataMimeType, bufferFactory);
8685
}
8786

8887
}

spring-messaging/src/main/java/org/springframework/messaging/rsocket/MessagingRSocket.java

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -44,18 +44,20 @@
4444
import org.springframework.util.RouteMatcher;
4545

4646
/**
47-
* Implementation of {@link RSocket} that wraps incoming requests with a
48-
* {@link Message}, delegates to a {@link Function} for handling, and then
49-
* obtains the response from a "reply" header.
47+
* Responder {@link RSocket} that wraps the payload and metadata of incoming
48+
* requests as a {@link Message} and then delegates to the configured
49+
* {@link RSocketMessageHandler} to handle it. The response, if applicable, is
50+
* obtained from the {@link RSocketPayloadReturnValueHandler#RESPONSE_HEADER
51+
* "rsocketResponse"} header.
5052
*
5153
* @author Rossen Stoyanchev
5254
* @since 5.2
5355
*/
5456
class MessagingRSocket extends AbstractRSocket {
5557

56-
private final Function<Message<?>, Mono<Void>> handler;
58+
private final RSocketMessageHandler messageHandler;
5759

58-
private final Function<String, RouteMatcher.Route> routeParser;
60+
private final RouteMatcher routeMatcher;
5961

6062
private final RSocketRequester requester;
6163

@@ -65,16 +67,16 @@ class MessagingRSocket extends AbstractRSocket {
6567
private final DataBufferFactory bufferFactory;
6668

6769

68-
MessagingRSocket(Function<Message<?>, Mono<Void>> handler,
69-
Function<String, RouteMatcher.Route> routeParser, RSocketRequester requester,
70-
@Nullable MimeType defaultDataMimeType, DataBufferFactory bufferFactory) {
70+
MessagingRSocket(RSocketMessageHandler messageHandler, RouteMatcher routeMatcher,
71+
RSocketRequester requester, @Nullable MimeType defaultDataMimeType,
72+
DataBufferFactory bufferFactory) {
7173

72-
this.routeParser = routeParser;
73-
74-
Assert.notNull(handler, "'handler' is required");
75-
Assert.notNull(routeParser, "'routeParser' is required");
74+
Assert.notNull(messageHandler, "'messageHandler' is required");
75+
Assert.notNull(routeMatcher, "'routeMatcher' is required");
7676
Assert.notNull(requester, "'requester' is required");
77-
this.handler = handler;
77+
78+
this.messageHandler = messageHandler;
79+
this.routeMatcher = routeMatcher;
7880
this.requester = requester;
7981
this.dataMimeType = defaultDataMimeType;
8082
this.bufferFactory = bufferFactory;
@@ -132,7 +134,7 @@ private Mono<Void> handle(Payload payload) {
132134
DataBuffer dataBuffer = retainDataAndReleasePayload(payload);
133135
int refCount = refCount(dataBuffer);
134136
Message<?> message = MessageBuilder.createMessage(dataBuffer, headers);
135-
return Mono.defer(() -> this.handler.apply(message))
137+
return Mono.defer(() -> this.messageHandler.handleMessage(message))
136138
.doFinally(s -> {
137139
if (refCount(dataBuffer) == refCount) {
138140
DataBufferUtils.release(dataBuffer);
@@ -154,7 +156,7 @@ private Flux<Payload> handleAndReply(Payload firstPayload, Flux<Payload> payload
154156
Flux<DataBuffer> buffers = payloads.map(this::retainDataAndReleasePayload).doOnSubscribe(s -> read.set(true));
155157
Message<Flux<DataBuffer>> message = MessageBuilder.createMessage(buffers, headers);
156158

157-
return Mono.defer(() -> this.handler.apply(message))
159+
return Mono.defer(() -> this.messageHandler.handleMessage(message))
158160
.doFinally(s -> {
159161
// Subscription should have happened by now due to ChannelSendOperator
160162
if (!read.get()) {
@@ -183,7 +185,7 @@ private DataBuffer retainDataAndReleasePayload(Payload payload) {
183185
private MessageHeaders createHeaders(String destination, @Nullable MonoProcessor<?> replyMono) {
184186
MessageHeaderAccessor headers = new MessageHeaderAccessor();
185187
headers.setLeaveMutable(true);
186-
RouteMatcher.Route route = this.routeParser.apply(destination);
188+
RouteMatcher.Route route = this.routeMatcher.parseRoute(destination);
187189
headers.setHeader(DestinationPatternsMessageCondition.LOOKUP_DESTINATION_HEADER, route);
188190
if (this.dataMimeType != null) {
189191
headers.setContentType(this.dataMimeType);

spring-messaging/src/main/java/org/springframework/messaging/rsocket/RSocketRequester.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,8 @@ interface Builder {
116116
RSocketRequester.Builder rsocketFactory(Consumer<RSocketFactory.ClientRSocketFactory> configurer);
117117

118118
/**
119-
* Set the {@link RSocketStrategies} instance.
120-
* @param strategies the strategies to use
119+
* Set the {@link RSocketStrategies} to use for access to encoders,
120+
* decoders, and a factory for {@code DataBuffer's}.
121121
*/
122122
RSocketRequester.Builder rsocketStrategies(@Nullable RSocketStrategies strategies);
123123

spring-messaging/src/main/java/org/springframework/messaging/rsocket/RSocketStrategies.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ interface Builder {
172172
Builder dataBufferFactory(DataBufferFactory bufferFactory);
173173

174174
/**
175-
* Builder the {@code RSocketStrategies} instance.
175+
* Build the {@code RSocketStrategies} instance.
176176
*/
177177
RSocketStrategies build();
178178
}

0 commit comments

Comments
 (0)