Rocket – это двоичный протокол, предназначенный для передачи потоков байтов, таких как TCP, WebSockets и Aeron.
Это позволяет использовать следующие симметричные модели взаимодействия посредством асинхронной передачи сообщений по одному соединению:
- запрос/ответ (поток из 1)
- запрос/поток (конечный поток из многих)
- выстрели и забудь (ответа нет)
- подписка на события (бесконечный поток многих)
Он поддерживает возобновление сеанса, что позволяет возобновлять длительные потоки через различные транспортные соединения. Это особенно полезно для связи с мобильным сервером, когда сетевые подключения часто прерываются, переключаются и повторно подключаются.
В нашем руководстве мы будем реализовывать сокет с использованием языка программирования Java.
Хотя я мог бы просто реализовать Socket с помощью простого Java-приложения, я выбрал Spring boot, потому что это огромный проект в экосистеме языков JVM. У Spring boot еще нет стабильной версии для Rocket, но это не должно мешать нам экспериментировать с ней.
Наш проект будет состоять из двух подпроектов. Потребитель , который будет выполнять запросы, и Производитель , который предоставит Потребителю данные.
Если вы хотите легко начать работу с проектом Spring boot, я рекомендую всегда использовать Spring Initializr .
Настройка Gradle
Прежде всего, мы должны настроить ваш build.gradle и включить rsocket-starter-dependency из Springboot:
Для Consumer мы должны также включить зависимость reactive-web-starter, потому что мы хотим каким-то образом отобразить данные, которые мы получаем от Producer .
Теперь давайте испачкаем руки и напишем какой-нибудь код 😉 .
Производитель
Сначала мы должны настроить, через какой порт наш Producer будет получать новые подключения:
Сокет spring.r.server.port=7000 настраивает сокет для начала прослушивания на порту 7000, а spring.main.lazy-initialization=true предназначен для того, чтобы убедиться, что Springboot будет лениво инициализировать свои компоненты.
Потребитель
Теперь, здесь, мы настраиваем клиент сокета, создавая два Бобы типа Ракета и Запрос сокета . Компонент Rocket bean используется для создания соединения с Производителем . Запрошенный сокетом R компонент похож на наш WebClient (если мы используем реактивный) или RestTemplate (если мы используем MVC), он будет выполнять запросы к Producer .
Наши два приложения ( Производитель и Потребитель ) будут использовать следующие объекты домена для их взаимодействия:
Простое Общение
Давайте начнем с простого примера, простого запроса с одним ответом.
Производитель
Если вы когда-либо использовали WebSockets с Spring boot, аннотация @MessageMapping должна быть вам знакома. Здесь с помощью @MessageMapping("приветствие") мы указываем маршрут “приветствие”, который получает Запрос приветствия и возвращает один объект Ответ на приветствие в качестве ответа.
Потребитель
Здесь мы видим простой @RestController , который вводит Запрос сокета (тот, который мы настроили ранее) и использует его для выполнения запроса. Как вы видите, мы говорим запрашивающему выполнить запрос к маршруту “приветствие” (который мы настроили ранее в Producer ).
Связь с потоком
Передача потока данных с помощью Rocket происходит естественно и не требует особых усилий.
Производитель
Как вы видите в приведенной выше сути, мы настроили наш @MessageMapping , как и раньше, но теперь мы возвращаем поток (не знаете, что такое Mono и Flux? Проверьте это StackOverflow post ).
Мы также используем .элементы задержки () метод для имитации задержки между нашими ответами.
Потребитель
Не так много изменилось по сравнению с нашим другим запросом к Producer , явно .route("greet-stream") . Но если вы посмотрите внимательно, то теперь наш @GetMapping выдает text/event-stream , а не стандартный application/json .
Давайте проверим результат!
Так вот оно что! Надеюсь, я дал вам четкое объяснение того, как использовать новый протокол сокетов!
Вы можете ознакомиться с проектом здесь:
Petros 0/пружинная загрузка-rsocket
Цель этого проекта – дать представление о том, как работать с протоколом сокетов с помощью Springboot framework.
Приступая к работе
./gradlew:продюсер:bootRun
./gradlew:потребитель:загрузчик
Перейдите к:
http://localhost:8080/greet/{Ваше имя}
http://localhost:8080/greet-stream/{Ваше имя}
Для получения дополнительной информации ознакомьтесь с моим руководством по началу работы здесь: https://dev.to/petros0/getting-started-with-rsocket-in-springboot-5889 .
Спасибо за чтение и получайте удовольствие!
Оригинал: “https://dev.to/petros0/getting-started-with-rsocket-in-springboot-5889”