Реагировать и ошибка REQUEST_CHANNEL rSocket с Spring Boot - PullRequest
1 голос
/ 19 февраля 2020

У нас есть рабочая демонстрация между React и Spring Boot Data Geode, использующая rSocket для запуска и забывания, ответа на запрос и потока запросов, но когда мы пытаемся использовать канал запроса, мы получаем ошибку:

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

Пока что в Интернете это выглядит так, как будто это возможно из RSocket Git

Это простое приложение с весенней загрузкой с конечными точками @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 возвращает поток цен, который отлично работает в потоке запросов, но мы бы предпочли использовать канал запросов для двунаправленных сообщений.

Клиентские версии

"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');
        }
})
...