Programación Reactiva con RxJava
-
Upload
paradigma-digital -
Category
Technology
-
view
196 -
download
2
Transcript of Programación Reactiva con RxJava
![Page 1: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/1.jpg)
Programación Reactiva
13/09/2016Google Campus
#paradigmarx
![Page 3: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/3.jpg)
1. Qué es programación reactiva
2. RxJava
3. Experiencia en paradigma
4. Ejemplos
ÍNDICE#paradigmarx
![Page 4: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/4.jpg)
Qué es programación reactiva
¿Por qué ahora?
¿Qué tiene de nuevo?
¿Es la próxima moda pasajera?
¿Ahora se programa todo así?
#paradigmarx
![Page 5: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/5.jpg)
RxJava ¿Qué es?
Es una librería Java que implementa las ReactiveX
(extensiones reactivas )
“Se basa en el en la composición asíncrona y
programas basados en eventos , mediante el
uso de secuencias observables.”
#paradigmarx
![Page 6: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/6.jpg)
RxJava ¿Qué ventajas nos aporta?
• Legibilidad
• Simplifica la concurrencia (evitando errores de
programación)
• Composición de operadores y funciones
• Permite añadir comportamiento al procesamiento
asíncrono
• Permite utilizar programación síncrona o asíncrona
#paradigmarx
![Page 7: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/7.jpg)
RxJava Simplicidad
Como gran ventaja resuelve los problemas que tenía
Java hasta ahora con el manejo de la programación
concurrente. La librería está disponible desde java 6.
Callbacks & Future<T>
#paradigmarx
![Page 8: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/8.jpg)
RxJava Fundamentos
Para gestionar todo lo que ocurre, esta
librería utiliza principalmente el patrón
Observer
#paradigmarx
![Page 9: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/9.jpg)
RxJava Patrón Observer
“Es un patrón de diseño que define una
dependencia del tipo uno-a-muchos entre
objetos, de manera que cuando uno de los
objetos cambia su estado, notifica este
cambio a todos los dependientes.”
#paradigmarx
![Page 10: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/10.jpg)
RxJava Observable
Los observables son los elementos que
notifican a todos sus observers los cambios.
Para ello es necesario que estos observer se
registren de alguna manera.
#paradigmarx
![Page 11: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/11.jpg)
RxJava Push vs Pull
Estamos acostumbrados a un modelo donde le
pedimos al productor un nuevo elemento cada vez que
lo necesitamos (Pull) en vez de que el productor nos
avise de cuando está disponible (Pull). En ocasiones
provoca bloquear al usuario hasta que esté disponible.
Iterable/ Iterator Observable / Observer
T next() onNext(T)
throws Exception onError(Throwable)
returns onCompleted()
#paradigmarx
![Page 12: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/12.jpg)
RxJava Eventos
Un elemento observable puede producir 3
tipos de eventos :
• Evento normal
• Evento de terminación
• Evento de error
#paradigmarx
![Page 13: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/13.jpg)
RxJava Suscripción
Cuando se realiza una subscripción , se crea un objeto
Subscription que nos da acceso al control sobre el flujo
de la información, permitiendo saber si hay elementos
subscritos o terminar la conexión
#paradigmarx
![Page 14: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/14.jpg)
RxJava Subscriber
Existe un elemento Subscriber que implementa ambos
interfaces, observer (lo que nos permite consumir los
eventos del observable) y subscription (con lo que
podremos controlar el flujo desde dentro del objeto)..
#paradigmarx
![Page 15: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/15.jpg)
RxJava Subscriber#paradigmarx
![Page 16: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/16.jpg)
RxJava Creación de observables
• Vacíos : Observable.emtpy()
• Error : Observable.error()
• Con valores concretos : Observable,just(values)
• Custom : Observable.create(details)
• De una lista : Observable.from()
• Rango númerico : Observable.range(from,n)
#paradigmarx
![Page 17: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/17.jpg)
RxJava Hot vs Cold Observables
Existe 2 tipos de Observables. Se distinguen principalmente
sobre la manera en la que emiten eventos. Los “calientes”
emiten eventos independientemente de si hay alguien
escuchando, mientras que los “fríos” sólo lo hacen cuando
tienen suscriptores, generando el evento para sus suscriptores
en exclusiva.
#paradigmarx
![Page 18: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/18.jpg)
RxJava Operadores
RxJava tiene una serie de operadores que nos permiten
realizar acciones sobre los elementos del observable,
dominarlos, encadenarlos y realizar composiciones de los
mismos será lo que nos de potencia al usar esta librería. Por
citar algunos
#paradigmarx
![Page 19: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/19.jpg)
RxJava Transformación
Son operadores que nos van a servir para aplicar
transformaciones a los elementos de origen de manera que
emitamos objetos distintos a la salida
#paradigmarx
![Page 20: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/20.jpg)
RxJava Map
Nos permite aplicar una transformación a un elemento de
nuestro objeto para transformarlo en otra cosa.
#paradigmarx
![Page 21: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/21.jpg)
RxJava Scan
Aplica una función a cada dato emitido y emite ese valor
secuencialmente
#paradigmarx
![Page 22: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/22.jpg)
RxJava Reduce
Aplica una función a cada dato emitido y emite el resultado
#paradigmarx
![Page 23: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/23.jpg)
RxJava Buffer
Permite almacenar un grupo de resultado y emitirlo como
grupo
#paradigmarx
![Page 24: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/24.jpg)
RxJava FlatMap
Transforma cada elemento del observable en otra sucesión de
observable, se suscribe y los une en único observable
#paradigmarx
![Page 25: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/25.jpg)
RxJava GroupBy
Divide el observable inicial en un conjunto de observables en
base a un criterio.
#paradigmarx
![Page 26: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/26.jpg)
RxJava Cache
Almacena todos los resultados y los repite siempre igual.
Hay que tener cuidado con la memoria si estamos
manejando Observables infinitos
#paradigmarx
![Page 27: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/27.jpg)
RxJava Filtrado
Permiten descartar ciertos elementos y emitir sólo un
subconjunto de los elementos iniciales.
#paradigmarx
![Page 28: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/28.jpg)
RxJava Filter
Realiza un filtrado sobre los eventos de origen
#paradigmarx
![Page 29: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/29.jpg)
RxJava Distinct
Elimina los duplicados
#paradigmarx
![Page 30: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/30.jpg)
RxJava Otros
• First
• Last
• Take , TakeLast,TakeUntil, TakeWhile
• Skip, SkipLast, SkipUntil, SkipWhile
#paradigmarx
![Page 31: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/31.jpg)
RxJava Combinacion de Observables
Es muy habitual trabajar con un conjunto de observables
que queramos combinar de alguna manera. Para ello
RxJava nos ofrece operadores que permiten combinarlos
para emitir un resultado.
#paradigmarx
![Page 32: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/32.jpg)
RxJava Merge /Concat
Estos operadores se suscriben los observables que le
pasemos como parámetro y unifica los eventos en un
único stream de salida.
#paradigmarx
![Page 33: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/33.jpg)
RxJava Switch
Muestra los eventos del último observable que ha
producido eventos. Cuando aparece un elemento en un
observable posterior, se borra la suscripción actual.
#paradigmarx
![Page 34: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/34.jpg)
RxJava Zip
Combina elementos de distintos observables y los fusiona
en un único elemento
Es importante que estén lo más sincronizados posible.
#paradigmarx
![Page 35: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/35.jpg)
RxJava CombineLatest/Amb
Permite realizar combinaciones con elementos sin que
estén sincronizados
#paradigmarx
![Page 36: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/36.jpg)
RxJava Temporales
Permiten alterar el tiempo en la generación de eventos.
#paradigmarx
![Page 37: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/37.jpg)
RxJava Timer
Crea un observable para que emita un evento determinado
en un tiempo predefinido.
#paradigmarx
![Page 38: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/38.jpg)
RxJava Delay
Retrasa la emisión de eventos por un determinado tiempo
#paradigmarx
![Page 39: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/39.jpg)
RxJava Interval
Emite una secuencia de números infinitos separados por
un intervalo definido
#paradigmarx
![Page 40: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/40.jpg)
RxJava Repeat
Crea un Observable que repite un evento múltiples veces.
#paradigmarx
![Page 41: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/41.jpg)
RxJava Retry
Permite reconectar cuando se produce un error
#paradigmarx
![Page 42: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/42.jpg)
RxJava Single
Emite un único evento o da error
#paradigmarx
![Page 43: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/43.jpg)
RxJava Timeout
Copia el Observable en la salida salvo que se produzca un
hueco mayor entre eventos al que se pasa por parámetro
#paradigmarx
![Page 44: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/44.jpg)
RxJava Try/catch
RxJava nos permite varias formas de utilizar el try catch.
Quizás una de las más legibles sea OnErrorResumeNext
#paradigmarx
![Page 45: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/45.jpg)
RxJava ¿Qué operador usar?
Para los principiantes existe un árbol de decisión que nos
ayuda a saber cual es el que deberíamos usar.
Podéis consultarlo en
http://reactivex.io/documentation/operators.html
#paradigmarx
![Page 46: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/46.jpg)
RxJava Side effects
Podemos añadir comportamiento a lo que pasa cuando
suceden ciertos eventos. RxJava nos da muchos eventos a los
que suscribirnos, pero no se pueden alterar :
• doOnCompleted() )
• doOnEach()
• doOnError()
• doOnNext()
• doOnRequest()
• doOnSubscribe()
• doOnTerminate()
• doOnUnsubscribe() )
#paradigmarx
![Page 47: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/47.jpg)
RxJava Concurrencia
Normalmente la concurrencia la va a decidir el que nos
consume.
Por ejemplo indicando suscribeOn(scheduler) o
ObserverOn(Scheduler)
#paradigmarx
![Page 48: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/48.jpg)
RxJava Lazy vs Eager
Cuando utilizamos RxJava estamos aprovechando las ventajas
de una ejecución perezosa. La ejecución se pospone al último
momento posible, esto es cuando un usuario se suscribe.
Esto ayuda a no bloquear recursos innecesariamente
Cuando creemos Observables utilizaremos Defer, utiliza una
factoria de observable y lo hacer de forma perezosa
#paradigmarx
![Page 49: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/49.jpg)
RxJava Bloqueante a No bloqueante
Con RxJava pasar de no bloqueante a bloqueante es muy
sencillo utilizando el operador toBlocking(). Lo contrario, es
más complicado porque implica un rediseño del algoritmo,
aunque RxJava da funciones para ello.
#paradigmarx
![Page 50: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/50.jpg)
Paradigma + RxJava
Consumo bajo de recursos
Gran rendimiento
Buen compañero con Vert.x
Mejora de legibilidad separando la operación
de la orquestación
#paradigmarx
![Page 51: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/51.jpg)
Ejemplos
#paradigmarx
![Page 52: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/52.jpg)
#paradigmarx
![Page 53: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/53.jpg)
#paradigmarx
![Page 54: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/54.jpg)
#paradigmarx
http://developer.couchbase.com/documentation/server/4.1/sdks/java-2.2/documents-atomic.html
![Page 55: Programación Reactiva con RxJava](https://reader030.fdocumento.com/reader030/viewer/2022021507/58836ab81a28ab536b8b6155/html5/thumbnails/55.jpg)
#paradigmarx