[Java] Посмотрим на rx.Single в RxJava?
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Всем добрый день! А может у кого-то и не день, но главное, чтобы был добрый. В этой статье я собираюсь рассказать совсем чуть-чуть про такой класс в RxJava, как Single.
А чем Single отличается от Observable ?
Конечно, у него нет всех методов, которые есть у Observable. Subscriber у Single также отличается тем, что содержит только два метода, а не три. Думаю, что все отличия в плане реализации вы сможете найти в документации.
Возникает вопрос:
чем вызваны такие изменения ?
Ответ тут очевиден: Single (что можно даже и из названия понять) содержит только один элемент, в отличии от Observable.
Кто-то подумает и скажет
пффф, ну и что? А я буду использовать всегда Obsevable, пусть в нем будет только один элемент.
По-моему мнению, в этом ничего страшного нет, но есть ли какие-то минусы от такого использования?
- Если вы знаете, что вы будете работать только с одним элементом, то в использовании Observable нет нужды или, как говорят, overkill;
- Также нужно понимать, что Observable более тяжеловесный, чем Single (а поговаривают, что Single даже быстрее);
Говоришь Single, хм...
В single возможны две ситуации:
- одно значение
- exception
Тут важно понимать, чего вы пытаетесь добиться, или какая ваша политика? Если вы считаете, что пустой результат для вас это нормально, то, скорее всего, Single вам не подойдет, но если это не так, и вы знаете, что результат обязательно должен быть, то Single это то, что вам надо. Кстати, стоит отметить, что у Single нет метода empty(). Это я на всякий случай решил сообщить.
Да покажи наконец как использовать этот Single!
Обычный пример из жизни. Предположим, что у нас микросервисная архитектура (обожаю микросервисы).
Входные данные: у нас есть три микросервиса A,B,C.
A — orchestration service.
Задача: сделать запрос в сервис B и в C из микросервиса A и сагрегировать данные.
Ответ: конечно, можно сделать запрос в микросервис B, а потом в микросервис C и потом сагрегировать данные в микросервисе A, но тогда приходится ждать результаты из одного микросервиса, а потом с другого. Ух, как же это долго!
Но вспоминаем, что у нас есть rx.Single, ураа!
Single<String> b = Single.fromCallable(() -> serviceA.getResponse())
.subscribeOn(Schedulers.io());
Single<String> c = Single.fromCallable(() -> serviceB.getResponse())
.subscribeOn(Schedulers.io());
Single.zip(b, c, (resultA, resultB) -> resultA + resultB);
И вот оно!
А что именно ?
Запрос в микросервис B и запрос в микросервис С происходят независимо друг от друга, а микросервис A просто ждет результатов.
Интересненько
Вот ссылка на документацию. Очень хорошая документация. Можно найти много чего полезного. Ну и книгу могу посоветовать: «Reactive Programming with RxJava».
===========
Источник:
habr.com
===========
Похожие новости:
- [Разработка веб-сайтов, JavaScript, Карьера в IT-индустрии, IT-компании] Как я попал на стажировку в Яндекс
- [Конференции, Интервью] Дмитрий Александров: «Мы не знали, во что ввязываемся»
- [JavaScript, Программирование, Разработка систем связи, Облачные сервисы] Скрываем номера курьеров и клиентов с помощью key-value хранилища
- [Системное администрирование, IT-инфраструктура, DevOps] Как работает single sign-on (технология единого входа)? (перевод)
- [Программирование, Java] 10 топовых плагинов для IntelliJ IDEA, которые ты не должен пропустить (перевод)
- [JavaScript, Разработка игр] SpaceShooter на Phaser 3
- [] JetBrains Academy: платформенные обновления, любимые проекты пользователей и годовая подписка
- [PostgreSQL, Java, Kotlin] PostGIS + JPA. Погружение в детали и тонкости для чайников
- [Программирование, Java] Сравнение Java-записей, Lombok @Data и Kotlin data-классов (перевод)
- [Тестирование IT-систем, PHP, Программирование] «Дело было вечером, делать было нечего» или краткая история о сравнении производительности языков программирования
Теги для поиска: #_java, #_java, #_rxjava, #_single, #_java
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 06:01
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Всем добрый день! А может у кого-то и не день, но главное, чтобы был добрый. В этой статье я собираюсь рассказать совсем чуть-чуть про такой класс в RxJava, как Single. А чем Single отличается от Observable ?
Конечно, у него нет всех методов, которые есть у Observable. Subscriber у Single также отличается тем, что содержит только два метода, а не три. Думаю, что все отличия в плане реализации вы сможете найти в документации. Возникает вопрос: чем вызваны такие изменения ?
Ответ тут очевиден: Single (что можно даже и из названия понять) содержит только один элемент, в отличии от Observable. Кто-то подумает и скажет пффф, ну и что? А я буду использовать всегда Obsevable, пусть в нем будет только один элемент.
По-моему мнению, в этом ничего страшного нет, но есть ли какие-то минусы от такого использования?
Говоришь Single, хм...
В single возможны две ситуации:
Тут важно понимать, чего вы пытаетесь добиться, или какая ваша политика? Если вы считаете, что пустой результат для вас это нормально, то, скорее всего, Single вам не подойдет, но если это не так, и вы знаете, что результат обязательно должен быть, то Single это то, что вам надо. Кстати, стоит отметить, что у Single нет метода empty(). Это я на всякий случай решил сообщить. Да покажи наконец как использовать этот Single!
Обычный пример из жизни. Предположим, что у нас микросервисная архитектура (обожаю микросервисы). Входные данные: у нас есть три микросервиса A,B,C. A — orchestration service. Задача: сделать запрос в сервис B и в C из микросервиса A и сагрегировать данные. Ответ: конечно, можно сделать запрос в микросервис B, а потом в микросервис C и потом сагрегировать данные в микросервисе A, но тогда приходится ждать результаты из одного микросервиса, а потом с другого. Ух, как же это долго! Но вспоминаем, что у нас есть rx.Single, ураа! Single<String> b = Single.fromCallable(() -> serviceA.getResponse())
.subscribeOn(Schedulers.io()); Single<String> c = Single.fromCallable(() -> serviceB.getResponse()) .subscribeOn(Schedulers.io()); Single.zip(b, c, (resultA, resultB) -> resultA + resultB); И вот оно! А что именно ?
Запрос в микросервис B и запрос в микросервис С происходят независимо друг от друга, а микросервис A просто ждет результатов. Интересненько
Вот ссылка на документацию. Очень хорошая документация. Можно найти много чего полезного. Ну и книгу могу посоветовать: «Reactive Programming with RxJava». =========== Источник: habr.com =========== Похожие новости:
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 06:01
Часовой пояс: UTC + 5