问题标签 [rsocket]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
442 浏览

spring-boot - RSocketRequester 不考虑 datamimeType

尝试将 Protobuf 与 RSocket 一起使用,Requester 不会考虑dataMimeType设置为application/protobufor application/vnd.google.protobuf。我收到错误No decoder

客户端应用程序

堆栈跟踪

但是,如果我明确禁用RSocketStrategiesAutoConfiguration并重新创建RSocketStrategiesbean,它就可以工作。

为什么也dataMimeType没有protobufRSocketStrategyCustomizer考虑过为什么要解码。

0 投票
1 回答
159 浏览

spring-boot - 如何在同一个应用程序中创建具有客户端和服务器的 RSocket 应用程序?

我正在尝试制作一个项目,我想在其中创建一个包含服务器和客户端应用程序的 rsocket 应用程序。我尝试了很多东西,但似乎没有任何效果,有人可以帮我吗?

0 投票
1 回答
181 浏览

spring-webflux - 使用 RSocket 和 Project Reactor 实现 202 ACCEPTED - Retry-After 行为

我正在实现一个典型的用例,其中客户端请求将异步生成的资源。因此,会立即生成并返回一个 resourceID:

此时 SERVER 中有一个后台任务,它最终会产生一个结果并将其存储在与 resID 关联的数据库中。客户端会定期请求资源,重试直到可用:

我认为 RSocket 将是一个完美的选择,以避免这种无休止的 CLIENT 重试,直到资源可用(步骤 3. on)。

哪种交互模型更适合这个问题,我该如何实现它?

考虑如下存储库:ResourceRepository.Mono<Result> getResult(String resID)

如果我选择请求/响应交互模型,我的情况与以前相同。除非有办法让 Mono 重试直到有结果。这可能吗?

使用请求/流,我可以返回Flux<Response>与 response.status=PROCESSING 类似的结果,直到对 Postgre 的查询返回结果,然后 Flux 将具有 response.status=OK 的元素,并且 Flux 将完成。在配置的时间段内完成 Flux 需要最长的时间而没有结果。在这种情况下,我怎么能提出这个问题?

我需要创建一个 Flux,它定期发出(具有最大周期超时),当存储库返回一个空的 Mono 时有一个没有结果的元素,或者当存储库有它时有一个实际值,完成 Flux。

0 投票
1 回答
822 浏览

spring-boot - RSocket Js 客户端未获取从 Spring Boot RSocket 服务器生成的元素

Github 上提供的示例项目:https ://github.com/codependent/rsocket-rating-service

Spring Boot RSocket 服务器消息映射需要一个 requestResponse 请求,返回一个简单的 POJO:

在客户端,我有以下 JS 代码连接到 RSocket 服务器并请求一个值:

索引.html

访问http://localhost:8080/index.html后输入一些文本并推送发送。

请求到达记录正确生成 onNext 值的服务器:

但是在客户端

永远不会被调用,浏览器日志只显示:

为什么它没有从服务器获取生成的值?

0 投票
1 回答
540 浏览

spring-boot - repeatWhenEmpty 运算符在 RSocket websocket 请求的上下文中不起作用,但在 HTTP 调用中起作用

我遇到了repeatWhenEmpty操作员的奇怪行为,这对我来说没有任何意义。我在 Github 上上传了一个存储库,其中包含最少的可重现样本:https ://github.com/codependent/rsocket-rating-service 。

考虑这个提供两个端点(HTTP @GetMapping("/requestRating") - WebSocket )的控制器@MessageMapping("request-rating")。注意这个调用.repeatWhenEmpty(Repeat.onlyIf<Any> { true }.backoff(Backoff.fixed(Duration.ofSeconds(1))))generateRating()链的中间:

启动应用程序后,我可以调用http://localhost:8080/requestRating?songId=1234它并返回一个结果,按预期显示这些日志:

当我从 Websocket 调用相同的逻辑时:

  1. 使用权http://localhost:8080/index.html
  2. 填写任何字符串并推送发送

奇怪的是,这些是我看到的所有日志:

大约三分钟后,出现了:

尽管已经生成了一个如 中所示的元素Next1,但没有调用doOnXXXafter 的运算符。repeatWhenEmpty客户显然也没有得到结果。

这里发生了什么?如何repeatWhenEmpty在 RSocket websocket 的上下文中使用?

更新:

我添加了一个log()运算符来获取更多信息。

HTTP 请求:

RSocket 请求:

三分钟后:

如您所见,存在一些差异

  1. 在 RSocket 请求中有一个onContextUpdate调用。
  2. RSocket 请求 1 个元素,HTTP 无界
  3. 尽管发射了一个元素(onNext),但 RSocket 执行似乎正在重试或做某事。CPU 在做一些工作时停留在 6%,这在 HTTP 调用中没有发生,如下图所示:

在此处输入图像描述

更新 2:

我一直在调试,并在第一次取消期间发现了这种执行差异,特别是在课堂上Operators

HTTP:

语境:

在此处输入图像描述

Consumer<Object> hook = context.getOrDefault(Hooks.KEY_ON_DISCARD, null);

hook为空,所以它不执行:

RSocket:

语境:

在此处输入图像描述

在这种情况下,钩子是:

在此处输入图像描述

forEachRemaining它在块中无限循环:

0 投票
0 回答
191 浏览

reactive-programming - RSocket 数据库(Cassandra 或 Postgresql)性能研究

我正在尝试在我的组织中将 RSocket 用于微服务。由于我们需要从 Cassandra 和 Postgresql 等数据库进行通信和获取很多内容,因此我观察到性能下降。

当我运行一个返回模拟响应的示例 Rsocket 客户端和 Rsocket 服务器时,我得到了 12k TPS 的吞吐量。一旦我与 Cassandra 集成以获得相同的代码库,它是 300 TPS,而 Postgresql 是 400 TPS。如果我将 HikariCP 添加到 Postgresql,它是 700 TPS。

对于阻塞 HTTP 的相同用例,它是 800 TPS,非阻塞 HTTP 是 1900 TPS。

这项研究是在 Mac 笔记本电脑 8 核、16 GB、rsocket-java(无 Spring 或 RPC)上进行的。

我很困惑 RSocket 是否适合微服务用例。

请提供您的经验和任何可用于进一步研究的基准。

0 投票
1 回答
183 浏览

spring-boot - 提交 Fire-N-Forget 请求

在 Spring Boot 应用程序中,我有以下工作代码用于在 Rest 控制器中提交请求-响应请求:

根据我对RSocket Java 文档的理解,我需要将 retriveMono(...) 替换为 send() 以提交 fire-n-forget 请求(在文档的第 12 页)。以下代码应该可以工作。

但是,它不起作用。在 TCP 首次亮相工具上,它没有任何流量。

提交fire-n-forget的正确方法是什么?

0 投票
0 回答
418 浏览

spring-boot - 什么是 prometheus-rsocket-proxy 以及如何使用它?

我有一个基于 Spring Boot 的短期服务。

到目前为止,我使用 PushGateway 将指标发送到 Prometheus。

我遇到了这个存储库,我试图了解如何设置代理。从文档中不清楚。

谢谢

0 投票
1 回答
122 浏览

gradle - 带有 Gradle 的 RSocket RPC (Windows) 二进制文件(Bluild 失败)

我正在尝试构建一个具有以下组件的混合项目:1:Spring Boot 2:rSocket 3:gRPC

它是一个多容器应用程序,其中容器 1(Spring 和 rSocket、Java)通过 Spring-rSocket 与容器 2(rSocker、Spring、gRPC、Java)交互。然后它通过 rSocket-RPC 将信息传递给容器 3(gRPC、Python)。

自过去 3 天以来一直在尝试,但由于依赖项冲突而能够设置一个 maven 项目,从而导致netty 调用失败。

开始设置 Gradle,与 maven 相比,我对 gradle 还是很陌生。为原型任务提出了以下脚本:

并遵循settings.gradle中的 pluginManagement

但是构建总是失败,说它无法找到插件:

看起来它没有在默认的 maven repo中找到插件,这是正确的,因为我知道protoc插件托管在jcenter中。但是,如果您看到了,我已经在pluginManagement中添加了 URL,但是为什么我的构建脚本没有捕获 jcenter 存储库?

任何帮助将非常感激 :-)

0 投票
2 回答
1452 浏览

spring-boot - 如何使用 rsocket 在 Spring Boot 中配置 SSL/TLS?

我已阅读stackoverflow 中的相关问题。但是,答案仅说明如何配置身份验证检查。我需要在 Spring Boot 中使用 rsocket 加密所有传输的数据。如何在带有 SSL/TLS 的 Spring Boot 中使用 tls。当我如下所示初始化 rsocket 客户端时,我找不到任何受支持的方法,尽管我知道 rsocket 它本身可以支持 SSL/TLS。我找到了一些例子:示例