当前位置: 首页 > 知识库问答 >
问题:

使用“wrap”函数创建Spring RSocketRequester时出现问题

邓赤岩
2023-03-14

当我像这样创建rsocketrequester时,它工作得很好:

@Bean
RSocketRequester rSocketRequester(RSocketStrategies rSocketStrategies) {
    return RSocketRequester.builder()
            .rsocketStrategies(rSocketStrategies)
            .connectTcp("localhost", 7000)
            .block();
}

但当我尝试发送消息创建if时,它会抛出一个异常:

@Bean
RSocket rSocket() {
    return RSocketFactory
            .connect()
            .transport(TcpClientTransport.create(7000))
            .start()
            .block();
}

@Bean
RSocketRequester rSocketRequester(RSocketStrategies rSocketStrategies) {
    return RSocketRequester.wrap(rSocket(), MediaType.APPLICATION_CBOR, MimeTypeUtils.parseMimeType(WellKnownMimeType.MESSAGE_RSOCKET_COMPOSITE_METADATA.getString()), rSocketStrategies);
}

发送功能:

public Mono<String> request(String route, String data, Class<String> clazz) {
    return rSocketRequester.route(route).data(data).retrieveMono(clazz);
}
@Controller
@AllArgsConstructor
public class RTestController {

    private EchoService echoService;

    @MessageMapping("test")
    Mono<String> test(String value) {
        return echoService.echo(value);
    }
}

wrap函数有什么问题?

共有1个答案

夏景同
2023-03-14

TL;DR:这不是Spring的问题,而是您创建客户机RSocket连接的方式的问题。

RSocketRequester.wrap方法通常在客户端启动连接并且服务器希望向另一方发送请求时在服务器端使用。Javadoc说您可以在客户端使用它,这是一个完全有效的用例。

现在,RSocketRequester.wrap在其参数中接受关于预期的数据mime类型和元数据mime类型的数据。这通常是双方在设置连接时协商的,使用RSocket setup/metadata_push帧。一旦建立了连接,就完成了。wrap方法需要这些参数,因为我们无法轻松地从现有的RSocket中提取这些信息。

 类似资料:
  • 当我像这样创建时,它工作得很好: 但是当我试图发送消息时,它会抛出一个异常,创建如下所示: 发送功能:

  • 我试图实现的是,我希望能够创建一个Azure函数,该函数将使用YouTube API将视频上传到YouTube。例如:https://developers.google.com/youtube/v3/docs/videos/insert .创建 Azure 函数后,我想在 Azure 逻辑应用中使用该函数。下面是 Azure 函数的代码(上移的视频): 当我运行这段代码时,我没有看到这样的预期结果

  • 我正在尝试使用GLFW创建一个窗口。窗口已创建,但经过几次尝试,创建窗口需要很长时间。 https://drive.google.com/file/d/1zq4IEjcSIJxy5wnXWLrGe46ptHMbKM5R/view?usp=sharing 我找不到任何解决办法,也不知道这是由什么引起的。 这是我正在使用的代码: 程序输出为 所以看起来初始化glfw需要很长时间,但我不知道如何修复它。

  • 创建一个函数,但它给出的错误数据库表如下所示

  • 我们正在将我们的事件系统迁移到函数式编程模型。我们遵循了下一个“指南”,它对消费者非常有效,但使用StreamBridge的生产者没有正确创建消息。 我们有下一个错误: 我们正在使用< code > 2021 . 0 . 0 spring-cloud版本。 通过简单的配置: 这是我们的自定义,它用于我们所有的微服务,因此,保持消息的格式很重要: 我们还使用< code>StreamBridge来生

  • 我希望得到一个Status204响应,这表明使用sd_MyPickList选项集在实体上创建了一个新的Picklist属性。 不幸的是,得到的回应是: github项目中已经存在一个问题(请参见https://github.com/microsoftdocs/dynamics-365-customer-engagement/issues/601),但是我想知道是否有解决这个问题的方法--我需要发送