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

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

笪煌
2023-03-14

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

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

但是当我试图发送消息时,它会抛出一个异常,创建如下所示:

@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);
    }
}

共有1个答案

曹奇文
2023-03-14

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

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

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

 类似资料:
  • 当我像这样创建时,它工作得很好: 但当我尝试发送消息创建if时,它会抛出一个异常: 发送功能: 函数有什么问题?

  • 我试图使用Micronaut、GraalVM和Docker在Java中创建和部署AWS Lambda函数。我正在按照本教程使用GraalVM运行时创建AWS lambda。 我使用命令创建了java项目。然后在不改变代码或配置文件的情况下,尝试用GraalVM本机映像构建Docker映像。在docker build步骤中,当构建graalvm本机映像时,我会收到以下警告: 警告:正在中止独立映像生

  • 本文向大家介绍Lua之wrap函数用法示例,包括了Lua之wrap函数用法示例的使用技巧和注意事项,需要的朋友参考一下 wrap和Create差不多,都是去创建一个coroutine,有些区别: 1,wrap不会通过resume去得到第一个返回值(错误信息) 2,在创建完之后,直接调用函数,转到coroutine,而create却要resume才能转到coroutine。 3,wrap不能查看状态

  • 我想创建一个Azure功能与JavaSDK,但我有一些问题定义触发器,我的代码创建的函数应用程序是: 我想定义一个EventHub触发器,但我不知道怎么做,我看到我的函数对象有以下方法: 有效载荷格式是什么?还有别的办法吗? 问候维克多

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

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