spring-boot - Spring Boot RSocketRequester 处理服务器重启
问题描述
我有一个关于 Springs RSocketRequester 的问题。我有一个 rsocket 服务器和客户端。客户端连接到此服务器并请求 @MessageMapping 端点。它按预期工作。
但是,如果我重新启动服务器会怎样。如何从客户端自动重新连接到 rsocket 服务器?谢谢
服务器:
@Controller
class RSC {
@MessageMapping("pong")
public Mono<String> pong(String m) {
return Mono.just("PONG " + m);
}
}
客户:
@Bean
public RSocketRequester rSocketRequester() {
return RSocketRequester
.builder()
.connectTcp("localhost", 7000)
.block();
}
@RestController
class RST {
@Autowired
private RSocketRequester requester;
@GetMapping(path = "/ping")
public Mono<String> ping(){
return this.requester
.route("pong")
.data("TEST")
.retrieveMono(String.class)
.doOnNext(System.out::println);
}
}
解决方案
针对 Spring Framework 5.2.6+ 进行了更新
你可以用io.rsocket.core.RSocketConnector#reconnect
.
@Bean
Mono<RSocketRequester> rSocketRequester(RSocketRequester.Builder rSocketRequesterBuilder) {
return rSocketRequesterBuilder
.rsocketConnector(connector -> connector
.reconnect(Retry.fixedDelay(Integer.MAX_VALUE, Duration.ofSeconds(1))))
.connectTcp("localhost", 7000);
}
@RestController
public class RST {
@Autowired
private Mono<RSocketRequester> rSocketRequesterMono;
@GetMapping(path = "/ping")
public Mono<String> ping() {
return rSocketRequesterMono.flatMap(rSocketRequester ->
rSocketRequester.route("pong")
.data("TEST")
.retrieveMono(String.class)
.doOnNext(System.out::println));
}
}
推荐阅读
- aws-lambda - 有人在使用无服务器部署 lambda 函数时遇到问题吗?
- android - 自定义微调器以获得不同的外观
- r - 如何使用 quosure 在 dplyr 中将过滤器语句作为函数参数传递
- node.js - 如何让浏览器显示 pdf 文件而不是从 Nodejs 服务器下载?
- android - Xamarin forms webview takes all the screen height
- java - WAP 输入一个句子并打印该句子中出现了多少次“is”[Java]
- java - Java 和 Kotlin 中的 Lambda 之间的差异
- awk - gensub() 可以接受函数调用作为第二个参数吗?
- ruby-on-rails - Mongo::Error::SocketError:在 mongo 副本集中执行查询时管道损坏
- laravel - Laravel 多重身份验证来自两个不同的路由和视图