【问题标题】:React and rSocket REQUEST_CHANNEL error with Spring Boot使用 Spring Boot 反应和 rSocket REQUEST_CHANNEL 错误
【发布时间】:2020-02-19 17:02:39
【问题描述】:

我们在 React 和 Spring Boot Data Geode 之间进行了一个工作演示,使用 rSocket 进行触发&忘记、请求响应和请求流,但是当我们尝试使用请求通道时,我们得到了错误:

org.springframework.messaging.MessageDeliveryException: Destination 'quotes' does not support REQUEST_CHANNEL. Supported interaction(s): [REQUEST_STREAM]

到目前为止,在网络上看来这应该可以从RSocket Git 获得

这是一个简单的 Spring Boot 应用程序,带有 @Controller 端点,在 rSocket 上运行,如下所示:

@Controller
public class RSocketController {
    private static final Logger log = LogManager.getLogger(RSocketController.class);

    @Autowired
    PriceService priceService;

    @MessageMapping(value = "quotes")
    public Flux<Quote> getQuotes() {
        log.info("In getQuotes");

        return priceService.generatePrices();
    }  
}

generatePrices 返回一个 Flux 价格,它在请求流中运行良好,但我们更愿意将请求通道用于双向通信。

客户端版本

"rsocket-core": "0.0.19"
"rsocket-flowable": "0.0.14"
"rsocket-tcp-client": "0.0.19"
"rsocket-websocket-client": "0.0.19"

客户端代码

const transport = new RSocketWebSocketClient(transportOptions);
const rSocketClient = new RSocketClient({serializers, setup, transport});
​
rSocketClient.connect().subscribe({
    onComplete: socket => {
        console.log('Client connected to the RSocket Server');
​
        socket.requestChannel(Flowable.just({
            data: 'foyss',
            metadata: String.fromCharCode(6) + 'quotes'
        })).subscribe({
            onComplete: function() {
                console.log(`Channel received end of server stream`);
            },
            onError: function(err) {
                console.log("err", err);
            },
            onNext: payload => {
                console.log(payload);
            },                
            onSubscribe: function(subscription) {
                console.log("got subscription");
                subscription.request(0x7fffffff);
            },
            onError: error => {
                console.log(error);
            },
            onSubscribe: cancel => {
                console.log('onSubscribe cancel');
            }})
        },
        onError: error => {
            console.log(error);
        },
        onSubscribe: cancel => {
            // console.log(cancel);
            console.log('onSubscribe cancel');
        }
})

【问题讨论】:

  • 您能发布客户端代码吗?另外,您使用的是哪个版本的 rsocket-js 客户端?
  • 非常感谢您对此事的任何帮助 :)
  • @foyss 是的,我能够复制您遇到的相同问题,但不确定为什么它不起作用。可能需要来自 spring rsocket 项目的一些人的帮助。
  • 我查看了文档和 js 库,它还没有实现(显然)
  • 为了支持通道,该方法必须接受数据流作为参数。在您的示例中,您创建了一个流(客户端发送一个请求,服务器返回一个数据流)

标签: spring spring-boot spring-data-gemfire rsocket


【解决方案1】:

一些 JS 库仍然不支持请求通道模型。请查看您的 JS 库的官方文档,例如:https://www.npmjs.com/package/ng-rsocket-rxjs

Missing:
Lease Handling
Server Setup
Resume Support
Request Channel
.....

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-21
    • 1970-01-01
    • 2020-09-12
    • 2023-03-20
    相关资源
    最近更新 更多