@@ -210,14 +210,22 @@ public Flux<BackendMessage> exchange(Predicate<BackendMessage> takeUntil, Publis
210
210
Assert .requireNonNull (takeUntil , "takeUntil must not be null" );
211
211
Assert .requireNonNull (requests , "requests must not be null" );
212
212
213
- return this .messageSubscriber .addConversation (takeUntil , requests , it -> this .requestSink .emitNext (it , Sinks .EmitFailureHandler .FAIL_FAST ), this ::isConnected );
213
+ if (!isConnected ()) {
214
+ return Flux .error (this .messageSubscriber .createClientClosedException ());
215
+ }
216
+
217
+ return this .messageSubscriber .addConversation (takeUntil , requests , this ::doSendRequest , this ::isConnected );
214
218
}
215
219
216
220
@ Override
217
221
public void send (FrontendMessage message ) {
218
222
Assert .requireNonNull (message , "requests must not be null" );
219
223
220
- this .requestSink .emitNext (Mono .just (message ), Sinks .EmitFailureHandler .FAIL_FAST );
224
+ doSendRequest (Mono .just (message ));
225
+ }
226
+
227
+ private void doSendRequest (Publisher <FrontendMessage > it ) {
228
+ this .requestSink .emitNext (it , Sinks .EmitFailureHandler .FAIL_FAST );
221
229
}
222
230
223
231
private Mono <Void > resumeError (Throwable throwable ) {
@@ -676,7 +684,7 @@ public Flux<BackendMessage> addConversation(Predicate<BackendMessage> takeUntil,
676
684
sink .onRequest (value -> onRequest (conversation , value ));
677
685
678
686
if (!isConnected .get ()) {
679
- sink .error (new PostgresConnectionClosedException ( "Cannot exchange messages because the connection is closed" ));
687
+ sink .error (createClientClosedException ( ));
680
688
return ;
681
689
}
682
690
@@ -689,12 +697,15 @@ public Flux<BackendMessage> addConversation(Predicate<BackendMessage> takeUntil,
689
697
sender .accept (requestMessages );
690
698
} else {
691
699
sink .error (new RequestQueueException ("Cannot exchange messages because the request queue limit is exceeded" ));
692
-
693
700
}
694
701
}
695
702
});
696
703
}
697
704
705
+ PostgresConnectionClosedException createClientClosedException () {
706
+ return new PostgresConnectionClosedException ("Cannot exchange messages because the connection is closed" );
707
+ }
708
+
698
709
/**
699
710
* {@link Subscription#request(long)} callback. Request more for a {@link Conversation}. Potentially, demands also more upstream elements.
700
711
*
0 commit comments