1

所以我开始玩 rsocket 和 spring boot 2.2 看看我是否可以在我的项目中使用它,但我面临一些麻烦。

通常,使用spring消息传递我定义了一个如下的监听器方法:

@MessageMapping("addGeolocation")
public Mono<Boolean> addGeolocation(@Header("metadata") MmeMetadata metadata, @Payload String geolocation) { ... }

我的理解是,使用 rsocket 我应该能够使用相同的逻辑,但是当我定义客户端时,我找不到设置消息头的简单方法。

目前我坚持这个:

boolean outcome = rSocketRequester.route("addGeolocation").metadata(...?).data(geolocationWKT).block();

元数据是标题的替代品吗?该方法签名似乎有点过于通用,无法像标题一样使用。如果我在其中放入一个 Map 将能够从其中解码标题?

谢谢你,费尔南多

4

1 回答 1

0

RSocket 使用的元数据可以是任何格式(即 MIME 类型),而不是一组名称-值对(即标头),它可以是具有多种类型的元数据的复合元数据,每种元数据的格式都不同。因此,您可以有一个部分包含路由元数据,另一个部分包含安全性,另一个部分包含跟踪,等等。

要实现类似于标头的功能,您可以将名称-值对作为 JSON 格式的元数据发送。现在在服务器端,您需要向 Spring 提供有关如何从传入请求的元数据中提取 Map(标头)的提示。为此,您可以配置 a MetadataExtractorand ,这在文档的本节中进行了描述。配置完成后,提取的 Map 将成为消息的标头,并且可以@MessageMapping像往常一样从方法(通过MessageHeaders@Header等)访问。

于 2020-09-01T20:36:32.567 回答