Посмотрим на rx.Single в RxJava?

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Всем добрый день! А может у кого-то и не день, но главное, чтобы был добрый. В этой статье я собираюсь рассказать совсем чуть-чуть про такой класс в 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».
Источник: https://habr.com/ru/post/563478/


Интересные статьи

Интересные статьи

К сожалению, мир машинного обучения принадлежит python. Он давно закрепился, как рабочий язык для Data Silence, с чем Microsoft решила поспорить. Так появился ML.NET, кросс-платформенная...
Все «за» и «против» 1С-Битрикс, какие есть альтернативы и что выгоднее знать разработчику? Читать далее
Среди советов по улучшению юзабилити интернет-магазина, которые можно встретить в инете, один из явных лидеров — совет «сообщайте посетителю стоимость доставки как можно раньше».
В 2019 году люди знакомятся с брендом, выбирают и, что самое главное, ПОКУПАЮТ через интернет. Сегодня практически у любого бизнеса есть свой сайт — от личных блогов, зарабатывающих на рекламе, до инт...
В «1С-Битрикс» считают: современный интернет-магазин должен быть визуально привлекательным, адаптированным для просмотра с мобильных устройств и максимально персонализированным с помощью технологии Бо...