установить заголовок для сообщений rsocket с весенней загрузкой

поэтому я начал играть с rsocket и spring boot 2.2, чтобы посмотреть, смогу ли я использовать его в своих проектах, но у меня возникли некоторые проблемы.

Обычно при обмене сообщениями Spring я определяю метод слушателя следующим образом:

@MessageMapping("addGeolocation")
public Mono<Boolean> addGeolocation(@Header("metadata") MmeMetadata metadata, @Payload String geolocation) { ... }

Насколько я понимаю, с rsocket я смогу использовать ту же логику, но когда я определяю клиента, я не мог найти простой способ установить заголовки сообщений.

В настоящее время я застрял в этом:

boolean outcome = rSocketRequester.route("addGeolocation").metadata(...?).data(geolocationWKT).block();

метаданные заменяют заголовки? эта сигнатура метода кажется слишком общей для использования в качестве заголовков. Если я вставлю в нее карту, Spring сможет декодировать из нее заголовки?

Спасибо, Фернандо


person fer.marino    schedule 20.02.2020    source источник
comment
Чем больше я вникаю в это, тем неловко становится. На мой взгляд, RSocket должен быть интегрирован с весенним веб-потоком, а не с весенним обменом сообщениями. Такие вещи, как RabbitMQ и ActiveMQ, не имеют ничего общего с rsocket ...   -  person fer.marino    schedule 21.02.2020
comment
было бы неплохо увидеть репродуктор с github или gitlab?   -  person özkan pakdil    schedule 26.02.2020


Ответы (1)


Вместо набора пар имя-значение (т.е. заголовков) RSocket использует метаданные, которые могут быть в любом формате (например, MIME-тип), и это может быть составные метаданные с несколькими типами метаданных, каждый из которых имеет свой формат. Таким образом, у вас может быть один раздел с метаданными маршрутизации, другой - с безопасностью, третий - с трассировкой и так далее.

Чтобы добиться чего-то похожего на заголовки, вы можете отправлять пары имя-значение в виде метаданных в формате JSON. Теперь на стороне сервера вам нужно предоставить Spring подсказку о том, как извлечь карту (заголовков) из метаданных входящих запросов. Для этого вы можете настроить MetadataExtractor, что описано в этом разделе документов. После настройки извлеченная карта становится заголовками сообщения и может быть доступна из @MessageMapping методов, как обычно (через MessageHeaders, @Header и т. Д.).

person Rossen Stoyanchev    schedule 01.09.2020