Мы оцениваем основы реактивного программирования для одного из наших проектов. Я просто прошел через руководства vert.x. Я немного проверил представление RxJava. RxJava казался ближе к CompletableFuture. Но, несмотря на основные шаблоны, RxJava и Vert.x предоставляют доступ к неблокируемому программированию. Я в замешательстве, в чем разница между ними. Я буду признателен за любую помощь в этом отношении.
Разница между vert.x и RxJava
Ответ 1
VertX - это серверная платформа для асинхронных серверов, а RxJava - это платформа для асинхронных вычислений. VertX поддерживает RxJava, и многие используют их вместе.
Если вы собираетесь создать веб-приложение и хотите масштабируемый бэкэнд, используйте VertX, возможно, с RxJava. Но если вы находитесь на другой платформе, просто используйте RxJava.
Подробнее об использовании VertX и RxJava в API Vert.x для RxJava
Ответ 2
С собственного сайта:
Eclipse Vert.x - это набор инструментов для создания реактивных приложений на JVM.
Он определяет основные API для написания асинхронных сетевых приложений (например, соединение с БД, мониторинг, аутентификация, обнаружение служб, кластеризация и т.д.)
Внутренне он основан на проекте Netty, высокопроизводительной асинхронной сетевой библиотеке для JVM. Тем не менее, он предоставляет высокоуровневый API, который легче рассуждать и по-прежнему высокопроизводительный.
Вы можете использовать только API на основе обратных вызовов Vert.x, но Vert.x также реализует эквивалентный Rxified API, используя RxJava под капотом. Это обеспечивает отличную платформу для интеграции модулей Vert.x в приложения RxJava.
Vert.x - это полиглот, поскольку он поддерживает многие другие API на основе языков JVM, такие как Kotlin, Groovy, Ruby, Scala и Ceylon. Более того, поскольку Vert.x управляется событиями и основан на сообщениях, он также предоставляет API-интерфейс JavaScript, весьма полезный для интеграции веб-интерфейса с бэкэндами.
Vert.x предоставляет свободные конечные точки HTTP и конфигурацию маршрутов, поддерживаемую обработчиками, в которых реализована бизнес-логика. Но настоящей нервной системой является шина событий, которая выступает в качестве поставщика телекоммуникационных услуг для всех локальных или распределенных компонентов Vert.x.
Этот самый Event-Bus поддерживает:
- Обмен сообщениями типа точка-точка, запрос-ответ и паб-подпункт
- Связь между вершинами полиглотов внутри одного экземпляра JVM
- Кластерное взаимодействие между вершинами полиглотов в нескольких экземплярах JVM
- Реализации Bridge to Stomp или AMQP для интеграции с другими приложениями
- Мост к SockJS для прямой интеграции с внешними интерфейсами Javascript
Event-bus поддерживается:
-
Менеджеры кластеров, такие как Hazelcast, InfiniSpan, Ignite или ZooKeeper, которые предоставляют распределенные карты, блокировки и счетчики через высокоуровневый доступ к API
-
API обнаружения служб Vert.x, обеспечивающий абстракцию на основе адреса для базовых сложных схем адресации
-
Точки доступа службы TCP с поддержкой SSL для двусторонней защищенной связи и максимальной производительности
Наконец, Vert.x может использоваться для разработки полноценного приложения или совместно с такими средами, как SpringBoot, Fibers и т.д.
Подробнее здесь, здесь и здесь.
Надеюсь это поможет,
Softjake
Ответ 3
Vert.x - это набор модулей и расширений, которые вместе называются инструментарием. Основной модуль содержит веб-сервер и модель параллелизма под названием Verticle. RxJava - это Java-реализация ReactiveX. Оба основаны на принципах, управляемых событиями, но веб-сервер не сравним с RxJava.
Так что я предполагаю, что базовое сравнение здесь - между Verticle и RxJava.
Verticle - это класс, состояние которого полностью недоступно извне, кроме как через шину событий. Таким образом, сообщения приходят, ставятся в очередь и выводятся последовательно в виде одного потока. Идея состоит в том, чтобы создать потокобезопасную среду без необходимости работать с пресловутым механизмом блокировки Java. Также в языке параллелизма такая структура называется Actor.
Когда использовать: всякий раз, когда вам нужно работать с synchronized
блоком Java. Ситуация, когда нескольким потокам необходим доступ к переменным класса, то есть к состоянию гонки, - это когда вы можете отбросить синхронизацию для Verticle или Actor. А в Vert.x вы можете использовать Verticle без запуска веб-сервера.
Чтобы объяснить RxJava, подумайте о массиве или списке. Что вы обычно делаете в списке? Зацикливать его, манипулировать содержимым, фильтровать, объединять и так далее. В наши дни такие операции можно легко выполнить с помощью функций более высокого порядка, таких как map
, filter
, zip
и т.д. Случай использования RxJava - это когда список асинхронный. Он применяет те же принципы функционального программирования для работы с потоками или живыми данными.
Когда использовать: Когда вы хотите манипулировать потоками. Например, сопоставление кадров из потока фильма с субтитрами из другого потока (RxJava был создан Netflix afterall). Или делать анализ в реальном времени из нескольких тикеров фондового рынка.