【问题标题】:rsocket routing metadata using RSocket-Java for Spring Rsocket Serverrsocket 使用 RSocket-Java 为 Spring Rsocket Server 路由元数据
【发布时间】:2020-07-05 15:06:59
【问题描述】:

如何设置路由元数据(在服务器使用 Spring Boot Rsocket 时仅使用 RSocket-Java 在有效负载中。

Flux<Payload> s = connection.flatMapMany(requester -> requester.requestStream(DefaultPayload.create("Some Message")))

服务器正在使用@MessageMapping("/route")

【问题讨论】:

    标签: spring-boot rsocket spring-rsocket


    【解决方案1】:

    交互类型

    SpringBoot 上使用@MessageMapping 的RSocket 交互类型是根据注解方法的签名决定的(更多信息在spring docs

    假设它有签名:

    @MessageMapping("/route")
    Flux<String> getStreamOfStrings(String message) {...}
    

    基于spring docs交互类型的基数表是Request-Stream。

    RSocket 客户端

    RSocket java 客户端需要为元数据指定 mime-type:

    RSocket rsocketClient = RSocketConnector.create()
        //metadata header needs to be specified
        .metadataMimeType(WellKnownMimeType.MESSAGE_RSOCKET_COMPOSITE_METADATA.getString())
        // value of spring.rsocket.server.port eg 7000
        .connect(TcpClientTransport.create(7000))
        .block();
    

    数据

    数据将是简单的字符串:

    ByteBuf data = ByteBufAllocator.DEFAULT.buffer().writeBytes("request msg".getBytes());
    

    元数据

    RSocket中的路由定义为metadata extension,需要与数据一起发送来指定路由。这是如何创建它的示例(请参阅包中的其他类 io.rsocket.metadata

    CompositeByteBuf metadata = ByteBufAllocator.DEFAULT.compositeBuffer();
    RoutingMetadata routingMetadata = TaggingMetadataCodec.createRoutingMetadata(ByteBufAllocator.DEFAULT, List.of("/route"));
    CompositeMetadataCodec.encodeAndAddMetadata(metadata,
            ByteBufAllocator.DEFAULT,
            WellKnownMimeType.MESSAGE_RSOCKET_ROUTING,
            routingMetadata.getContent());
    

    请求流请求

    创建了数据和元数据,因此您可以使用以下命令执行requestSteam

    rsocketClient.requestStream(DefaultPayload.create(data, metadata))
        .map(Payload::getDataUtf8)
        .toIterable()
        .forEach(System.out::println);
    

    【讨论】:

    • 这行得通!我们是否必须为每条路线创建元数据,还是在创建 Payload 时从列表中使用元数据?
    • 一种选择是为每个路由初始化元数据并将其存储在 Map(Route,Metadata) 中,并在创建有效负载时使用它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多