【问题标题】:set header on rsocket messages with spring boot使用弹簧启动在 rsocket 消息上设置标头
【发布时间】:2020-02-20 07:05:02
【问题描述】:

所以我开始使用 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 将能够从其中解码标题?

谢谢你, 费尔南多

【问题讨论】:

  • 我越深入这个,它就越尴尬。在我看来,RSocket 应该与 spring webflow 集成,而不是 spring 消息传递。 RabbitMQ 和 ActiveMQ 之类的东西与 rsocket 没有任何共同之处...
  • 很高兴看到来自 github 或 gitlab 的复制者?

标签: java spring-boot rsocket


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2020-06-09
    • 2022-01-04
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    • 2018-11-18
    • 2016-12-09
    • 1970-01-01
    • 2019-05-27
    相关资源
    最近更新 更多