SlideShare a Scribd company logo
1 of 56
Download to read offline
Programación Reactiva
13/09/2016Google Campus
#paradigmarx
¿Quien soy?
jpgonzalez@paradigmadigital.com
#paradigmarx
1. Qué es programación reactiva
2. RxJava
3. Experiencia en paradigma
4. Ejemplos
ÍNDICE
#paradigmarx
Qué es programación reactiva
¿Por qué ahora?
¿Qué tiene de nuevo?
¿Es la próxima moda pasajera?
¿Ahora se programa todo así?
#paradigmarx
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
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
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
RxJava Fundamentos
Para gestionar todo lo que ocurre, esta
librería utiliza principalmente el patrón
Observer
#paradigmarx
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
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
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
RxJava Eventos
Un elemento observable puede producir 3
tipos de eventos :
• Evento normal
• Evento de terminación
• Evento de error
#paradigmarx
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
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
RxJava Subscriber
#paradigmarx
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
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
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
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
RxJava Map
Nos permite aplicar una transformación a un elemento de
nuestro objeto para transformarlo en otra cosa.
#paradigmarx
RxJava Scan
Aplica una función a cada dato emitido y emite ese valor
secuencialmente
#paradigmarx
RxJava Reduce
Aplica una función a cada dato emitido y emite el resultado
#paradigmarx
RxJava Buffer
Permite almacenar un grupo de resultado y emitirlo como
grupo
#paradigmarx
RxJava FlatMap
Transforma cada elemento del observable en otra sucesión de
observable, se suscribe y los une en único observable
#paradigmarx
RxJava GroupBy
Divide el observable inicial en un conjunto de observables en
base a un criterio.
#paradigmarx
RxJava Cache
Almacena todos los resultados y los repite siempre igual.
Hay que tener cuidado con la memoria si estamos
manejando Observables infinitos
#paradigmarx
RxJava Filtrado
Permiten descartar ciertos elementos y emitir sólo un
subconjunto de los elementos iniciales.
#paradigmarx
RxJava Filter
Realiza un filtrado sobre los eventos de origen
#paradigmarx
RxJava Distinct
Elimina los duplicados
#paradigmarx
RxJava Otros
• First
• Last
• Take , TakeLast,TakeUntil, TakeWhile
• Skip, SkipLast, SkipUntil, SkipWhile
#paradigmarx
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
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
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
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
RxJava CombineLatest/Amb
Permite realizar combinaciones con elementos sin que
estén sincronizados
#paradigmarx
RxJava Temporales
Permiten alterar el tiempo en la generación de eventos.
#paradigmarx
RxJava Timer
Crea un observable para que emita un evento determinado
en un tiempo predefinido.
#paradigmarx
RxJava Delay
Retrasa la emisión de eventos por un determinado tiempo
#paradigmarx
RxJava Interval
Emite una secuencia de números infinitos separados por
un intervalo definido
#paradigmarx
RxJava Repeat
Crea un Observable que repite un evento múltiples veces.
#paradigmarx
RxJava Retry
Permite reconectar cuando se produce un error
#paradigmarx
RxJava Single
Emite un único evento o da error
#paradigmarx
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
RxJava Try/catch
RxJava nos permite varias formas de utilizar el try catch.
Quizás una de las más legibles sea OnErrorResumeNext
#paradigmarx
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
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
RxJava Concurrencia
Normalmente la concurrencia la va a decidir el que nos
consume.
Por ejemplo indicando suscribeOn(scheduler) o
ObserverOn(Scheduler)
#paradigmarx
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
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
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
Ejemplos
#paradigmarx
#paradigmarx
#paradigmarx
#paradigmarx
http://developer.couchbase.com/documentation/server/4.1/sdks/java-2.2/documents-atomic.html
#paradigmarx
#paradigmarx
Muchas gracias
Buscamos talento : people@paradigmadigital.com

More Related Content

What's hot

How to build a streaming Lakehouse with Flink, Kafka, and Hudi
How to build a streaming Lakehouse with Flink, Kafka, and HudiHow to build a streaming Lakehouse with Flink, Kafka, and Hudi
How to build a streaming Lakehouse with Flink, Kafka, and HudiFlink Forward
 
Common Strategies for Improving Performance on Your Delta Lakehouse
Common Strategies for Improving Performance on Your Delta LakehouseCommon Strategies for Improving Performance on Your Delta Lakehouse
Common Strategies for Improving Performance on Your Delta LakehouseDatabricks
 
Pyspark Tutorial | Introduction to Apache Spark with Python | PySpark Trainin...
Pyspark Tutorial | Introduction to Apache Spark with Python | PySpark Trainin...Pyspark Tutorial | Introduction to Apache Spark with Python | PySpark Trainin...
Pyspark Tutorial | Introduction to Apache Spark with Python | PySpark Trainin...Edureka!
 
[EN] Building modern data pipeline with Snowflake + DBT + Airflow.pdf
[EN] Building modern data pipeline with Snowflake + DBT + Airflow.pdf[EN] Building modern data pipeline with Snowflake + DBT + Airflow.pdf
[EN] Building modern data pipeline with Snowflake + DBT + Airflow.pdfChris Hoyean Song
 
A Thorough Comparison of Delta Lake, Iceberg and Hudi
A Thorough Comparison of Delta Lake, Iceberg and HudiA Thorough Comparison of Delta Lake, Iceberg and Hudi
A Thorough Comparison of Delta Lake, Iceberg and HudiDatabricks
 
Modularized ETL Writing with Apache Spark
Modularized ETL Writing with Apache SparkModularized ETL Writing with Apache Spark
Modularized ETL Writing with Apache SparkDatabricks
 
Apache Sedona: how to process petabytes of agronomic data with Spark
Apache Sedona: how to process petabytes of agronomic data with SparkApache Sedona: how to process petabytes of agronomic data with Spark
Apache Sedona: how to process petabytes of agronomic data with SparkLuiz Henrique Zambom Santana
 
Introduction to Apache Flink
Introduction to Apache FlinkIntroduction to Apache Flink
Introduction to Apache Flinkdatamantra
 
Introduction to Apache NiFi dws19 DWS - DC 2019
Introduction to Apache NiFi   dws19 DWS - DC 2019Introduction to Apache NiFi   dws19 DWS - DC 2019
Introduction to Apache NiFi dws19 DWS - DC 2019Timothy Spann
 
Squirreling Away $640 Billion: How Stripe Leverages Flink for Change Data Cap...
Squirreling Away $640 Billion: How Stripe Leverages Flink for Change Data Cap...Squirreling Away $640 Billion: How Stripe Leverages Flink for Change Data Cap...
Squirreling Away $640 Billion: How Stripe Leverages Flink for Change Data Cap...Flink Forward
 
Blue-green deploys with Pulsar & Envoy in an event-driven microservice ecosys...
Blue-green deploys with Pulsar & Envoy in an event-driven microservice ecosys...Blue-green deploys with Pulsar & Envoy in an event-driven microservice ecosys...
Blue-green deploys with Pulsar & Envoy in an event-driven microservice ecosys...StreamNative
 
High-speed Database Throughput Using Apache Arrow Flight SQL
High-speed Database Throughput Using Apache Arrow Flight SQLHigh-speed Database Throughput Using Apache Arrow Flight SQL
High-speed Database Throughput Using Apache Arrow Flight SQLScyllaDB
 
Designing Apache Hudi for Incremental Processing With Vinoth Chandar and Etha...
Designing Apache Hudi for Incremental Processing With Vinoth Chandar and Etha...Designing Apache Hudi for Incremental Processing With Vinoth Chandar and Etha...
Designing Apache Hudi for Incremental Processing With Vinoth Chandar and Etha...HostedbyConfluent
 
Stream Processing – Concepts and Frameworks
Stream Processing – Concepts and FrameworksStream Processing – Concepts and Frameworks
Stream Processing – Concepts and FrameworksGuido Schmutz
 
Building robust CDC pipeline with Apache Hudi and Debezium
Building robust CDC pipeline with Apache Hudi and DebeziumBuilding robust CDC pipeline with Apache Hudi and Debezium
Building robust CDC pipeline with Apache Hudi and DebeziumTathastu.ai
 
Apache Spark overview
Apache Spark overviewApache Spark overview
Apache Spark overviewDataArt
 
Unified Big Data Processing with Apache Spark (QCON 2014)
Unified Big Data Processing with Apache Spark (QCON 2014)Unified Big Data Processing with Apache Spark (QCON 2014)
Unified Big Data Processing with Apache Spark (QCON 2014)Databricks
 
Running Airflow Workflows as ETL Processes on Hadoop
Running Airflow Workflows as ETL Processes on HadoopRunning Airflow Workflows as ETL Processes on Hadoop
Running Airflow Workflows as ETL Processes on Hadoopclairvoyantllc
 

What's hot (20)

How to build a streaming Lakehouse with Flink, Kafka, and Hudi
How to build a streaming Lakehouse with Flink, Kafka, and HudiHow to build a streaming Lakehouse with Flink, Kafka, and Hudi
How to build a streaming Lakehouse with Flink, Kafka, and Hudi
 
The delta architecture
The delta architectureThe delta architecture
The delta architecture
 
Common Strategies for Improving Performance on Your Delta Lakehouse
Common Strategies for Improving Performance on Your Delta LakehouseCommon Strategies for Improving Performance on Your Delta Lakehouse
Common Strategies for Improving Performance on Your Delta Lakehouse
 
Pyspark Tutorial | Introduction to Apache Spark with Python | PySpark Trainin...
Pyspark Tutorial | Introduction to Apache Spark with Python | PySpark Trainin...Pyspark Tutorial | Introduction to Apache Spark with Python | PySpark Trainin...
Pyspark Tutorial | Introduction to Apache Spark with Python | PySpark Trainin...
 
[EN] Building modern data pipeline with Snowflake + DBT + Airflow.pdf
[EN] Building modern data pipeline with Snowflake + DBT + Airflow.pdf[EN] Building modern data pipeline with Snowflake + DBT + Airflow.pdf
[EN] Building modern data pipeline with Snowflake + DBT + Airflow.pdf
 
A Thorough Comparison of Delta Lake, Iceberg and Hudi
A Thorough Comparison of Delta Lake, Iceberg and HudiA Thorough Comparison of Delta Lake, Iceberg and Hudi
A Thorough Comparison of Delta Lake, Iceberg and Hudi
 
Modularized ETL Writing with Apache Spark
Modularized ETL Writing with Apache SparkModularized ETL Writing with Apache Spark
Modularized ETL Writing with Apache Spark
 
Apache Sedona: how to process petabytes of agronomic data with Spark
Apache Sedona: how to process petabytes of agronomic data with SparkApache Sedona: how to process petabytes of agronomic data with Spark
Apache Sedona: how to process petabytes of agronomic data with Spark
 
Introduction to Apache Flink
Introduction to Apache FlinkIntroduction to Apache Flink
Introduction to Apache Flink
 
Introduction to Apache NiFi dws19 DWS - DC 2019
Introduction to Apache NiFi   dws19 DWS - DC 2019Introduction to Apache NiFi   dws19 DWS - DC 2019
Introduction to Apache NiFi dws19 DWS - DC 2019
 
Squirreling Away $640 Billion: How Stripe Leverages Flink for Change Data Cap...
Squirreling Away $640 Billion: How Stripe Leverages Flink for Change Data Cap...Squirreling Away $640 Billion: How Stripe Leverages Flink for Change Data Cap...
Squirreling Away $640 Billion: How Stripe Leverages Flink for Change Data Cap...
 
Blue-green deploys with Pulsar & Envoy in an event-driven microservice ecosys...
Blue-green deploys with Pulsar & Envoy in an event-driven microservice ecosys...Blue-green deploys with Pulsar & Envoy in an event-driven microservice ecosys...
Blue-green deploys with Pulsar & Envoy in an event-driven microservice ecosys...
 
Apache airflow
Apache airflowApache airflow
Apache airflow
 
High-speed Database Throughput Using Apache Arrow Flight SQL
High-speed Database Throughput Using Apache Arrow Flight SQLHigh-speed Database Throughput Using Apache Arrow Flight SQL
High-speed Database Throughput Using Apache Arrow Flight SQL
 
Designing Apache Hudi for Incremental Processing With Vinoth Chandar and Etha...
Designing Apache Hudi for Incremental Processing With Vinoth Chandar and Etha...Designing Apache Hudi for Incremental Processing With Vinoth Chandar and Etha...
Designing Apache Hudi for Incremental Processing With Vinoth Chandar and Etha...
 
Stream Processing – Concepts and Frameworks
Stream Processing – Concepts and FrameworksStream Processing – Concepts and Frameworks
Stream Processing – Concepts and Frameworks
 
Building robust CDC pipeline with Apache Hudi and Debezium
Building robust CDC pipeline with Apache Hudi and DebeziumBuilding robust CDC pipeline with Apache Hudi and Debezium
Building robust CDC pipeline with Apache Hudi and Debezium
 
Apache Spark overview
Apache Spark overviewApache Spark overview
Apache Spark overview
 
Unified Big Data Processing with Apache Spark (QCON 2014)
Unified Big Data Processing with Apache Spark (QCON 2014)Unified Big Data Processing with Apache Spark (QCON 2014)
Unified Big Data Processing with Apache Spark (QCON 2014)
 
Running Airflow Workflows as ETL Processes on Hadoop
Running Airflow Workflows as ETL Processes on HadoopRunning Airflow Workflows as ETL Processes on Hadoop
Running Airflow Workflows as ETL Processes on Hadoop
 

Viewers also liked

Programación Reactiva en Android
Programación Reactiva en AndroidProgramación Reactiva en Android
Programación Reactiva en AndroidDroidcon Spain
 
Use Groovy&Grails in your spring boot projects
Use Groovy&Grails in your spring boot projectsUse Groovy&Grails in your spring boot projects
Use Groovy&Grails in your spring boot projectsParadigma Digital
 
Analysis of Websites as Graphs for SEO
Analysis of Websites as Graphs for SEOAnalysis of Websites as Graphs for SEO
Analysis of Websites as Graphs for SEOParadigma Digital
 
Manuel Hurtado. Couchbase paradigma4oct
Manuel Hurtado. Couchbase paradigma4octManuel Hurtado. Couchbase paradigma4oct
Manuel Hurtado. Couchbase paradigma4octParadigma Digital
 
Google Analytics for Developers
Google Analytics for DevelopersGoogle Analytics for Developers
Google Analytics for DevelopersParadigma Digital
 
¿Cómo vencer a los dragones digitales?
¿Cómo vencer a los dragones digitales?¿Cómo vencer a los dragones digitales?
¿Cómo vencer a los dragones digitales?Paradigma Digital
 
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!Paradigma Digital
 
Programación Reactiva, Javascript Isomorfo y Meteorjs !
Programación Reactiva, Javascript Isomorfo y Meteorjs !Programación Reactiva, Javascript Isomorfo y Meteorjs !
Programación Reactiva, Javascript Isomorfo y Meteorjs !ouuyeah
 
Reactive Programming in Java 8 with Rx-Java
Reactive Programming in Java 8 with Rx-JavaReactive Programming in Java 8 with Rx-Java
Reactive Programming in Java 8 with Rx-JavaKasun Indrasiri
 

Viewers also liked (19)

Programación Reactiva en Android
Programación Reactiva en AndroidProgramación Reactiva en Android
Programación Reactiva en Android
 
Overview atlas (1)
Overview atlas (1)Overview atlas (1)
Overview atlas (1)
 
Use Groovy&Grails in your spring boot projects
Use Groovy&Grails in your spring boot projectsUse Groovy&Grails in your spring boot projects
Use Groovy&Grails in your spring boot projects
 
Analysis of Websites as Graphs for SEO
Analysis of Websites as Graphs for SEOAnalysis of Websites as Graphs for SEO
Analysis of Websites as Graphs for SEO
 
ECMAScript 6
ECMAScript 6ECMAScript 6
ECMAScript 6
 
Manuel Hurtado. Couchbase paradigma4oct
Manuel Hurtado. Couchbase paradigma4octManuel Hurtado. Couchbase paradigma4oct
Manuel Hurtado. Couchbase paradigma4oct
 
Cómo usar google analytics
Cómo usar google analyticsCómo usar google analytics
Cómo usar google analytics
 
Kafka y python
Kafka y pythonKafka y python
Kafka y python
 
Google Analytics for Developers
Google Analytics for DevelopersGoogle Analytics for Developers
Google Analytics for Developers
 
Transformación Digital
Transformación DigitalTransformación Digital
Transformación Digital
 
¿Cómo vencer a los dragones digitales?
¿Cómo vencer a los dragones digitales?¿Cómo vencer a los dragones digitales?
¿Cómo vencer a los dragones digitales?
 
Python y Flink
Python y FlinkPython y Flink
Python y Flink
 
Introducción a Kubernetes
Introducción a KubernetesIntroducción a Kubernetes
Introducción a Kubernetes
 
HTML5 Web Components
HTML5 Web ComponentsHTML5 Web Components
HTML5 Web Components
 
Introducción a Django
Introducción a DjangoIntroducción a Django
Introducción a Django
 
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
 
Programación Reactiva, Javascript Isomorfo y Meteorjs !
Programación Reactiva, Javascript Isomorfo y Meteorjs !Programación Reactiva, Javascript Isomorfo y Meteorjs !
Programación Reactiva, Javascript Isomorfo y Meteorjs !
 
Cultura Digital Paradigma
Cultura Digital ParadigmaCultura Digital Paradigma
Cultura Digital Paradigma
 
Reactive Programming in Java 8 with Rx-Java
Reactive Programming in Java 8 with Rx-JavaReactive Programming in Java 8 with Rx-Java
Reactive Programming in Java 8 with Rx-Java
 

Similar to Programación Reactiva con RxJava

Java 8 time to join the future
Java 8  time to join the futureJava 8  time to join the future
Java 8 time to join the futureParadigma Digital
 
Introduccion a Programacion Reactiva
Introduccion a Programacion ReactivaIntroduccion a Programacion Reactiva
Introduccion a Programacion ReactivaAndres Almiray
 
Grails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasGrails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasCarlos Camacho
 
Presentación Java Evolution - GlobalLogic Club
Presentación Java Evolution - GlobalLogic ClubPresentación Java Evolution - GlobalLogic Club
Presentación Java Evolution - GlobalLogic ClubGlobalLogic Latinoamérica
 
Un Framework de Triggers Rock Solid en Salesforce
Un Framework de Triggers Rock Solid en SalesforceUn Framework de Triggers Rock Solid en Salesforce
Un Framework de Triggers Rock Solid en SalesforceEsteve Graells
 
Java8 : Más allá de las Expresiones Lambdas
Java8 :  Más allá de las Expresiones LambdasJava8 :  Más allá de las Expresiones Lambdas
Java8 : Más allá de las Expresiones LambdasEudris Cabrera
 
Reporting (Allure - Cucumber). Clear As The Math
Reporting (Allure - Cucumber). Clear As The Math	Reporting (Allure - Cucumber). Clear As The Math
Reporting (Allure - Cucumber). Clear As The Math Globant
 
Jyoc java-cap21 jse avanzado
Jyoc java-cap21 jse avanzadoJyoc java-cap21 jse avanzado
Jyoc java-cap21 jse avanzadoJyoc X
 
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez.NET UY Meetup
 
Introduccion al Akelos Php Framework
Introduccion al Akelos Php FrameworkIntroduccion al Akelos Php Framework
Introduccion al Akelos Php FrameworkBermi Ferrer
 
Introduccion a Programacion Reactiva
Introduccion a Programacion ReactivaIntroduccion a Programacion Reactiva
Introduccion a Programacion ReactivaAndres Almiray
 
React Hooks ¿Por donde empezar?
React Hooks ¿Por donde empezar?React Hooks ¿Por donde empezar?
React Hooks ¿Por donde empezar?Adrian Diaz Cervera
 
Conociendo las tecnologías de TypeSafe (Primer meetup Scala Perú Nov 2015)
Conociendo las tecnologías de TypeSafe (Primer meetup Scala Perú Nov 2015)Conociendo las tecnologías de TypeSafe (Primer meetup Scala Perú Nov 2015)
Conociendo las tecnologías de TypeSafe (Primer meetup Scala Perú Nov 2015)Marco Antonio Ordoñez Valverde
 

Similar to Programación Reactiva con RxJava (20)

Java 8 time to join the future
Java 8  time to join the futureJava 8  time to join the future
Java 8 time to join the future
 
Introduccion a Programacion Reactiva
Introduccion a Programacion ReactivaIntroduccion a Programacion Reactiva
Introduccion a Programacion Reactiva
 
JVM Reactive Programming
JVM Reactive ProgrammingJVM Reactive Programming
JVM Reactive Programming
 
Grails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasGrails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - Sistemas
 
Java
JavaJava
Java
 
Presentación Java Evolution - GlobalLogic Club
Presentación Java Evolution - GlobalLogic ClubPresentación Java Evolution - GlobalLogic Club
Presentación Java Evolution - GlobalLogic Club
 
Un Framework de Triggers Rock Solid en Salesforce
Un Framework de Triggers Rock Solid en SalesforceUn Framework de Triggers Rock Solid en Salesforce
Un Framework de Triggers Rock Solid en Salesforce
 
Rx js
Rx jsRx js
Rx js
 
Concurrencia en Java
Concurrencia en Java Concurrencia en Java
Concurrencia en Java
 
Java8 : Más allá de las Expresiones Lambdas
Java8 :  Más allá de las Expresiones LambdasJava8 :  Más allá de las Expresiones Lambdas
Java8 : Más allá de las Expresiones Lambdas
 
Reporting (Allure - Cucumber). Clear As The Math
Reporting (Allure - Cucumber). Clear As The Math	Reporting (Allure - Cucumber). Clear As The Math
Reporting (Allure - Cucumber). Clear As The Math
 
Jyoc java-cap21 jse avanzado
Jyoc java-cap21 jse avanzadoJyoc java-cap21 jse avanzado
Jyoc java-cap21 jse avanzado
 
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
 
Introduccion al Akelos Php Framework
Introduccion al Akelos Php FrameworkIntroduccion al Akelos Php Framework
Introduccion al Akelos Php Framework
 
Java
Java Java
Java
 
J Flex Cup
J Flex CupJ Flex Cup
J Flex Cup
 
Introduccion a Programacion Reactiva
Introduccion a Programacion ReactivaIntroduccion a Programacion Reactiva
Introduccion a Programacion Reactiva
 
Guia del trabajo con excepciones
Guia del trabajo con excepcionesGuia del trabajo con excepciones
Guia del trabajo con excepciones
 
React Hooks ¿Por donde empezar?
React Hooks ¿Por donde empezar?React Hooks ¿Por donde empezar?
React Hooks ¿Por donde empezar?
 
Conociendo las tecnologías de TypeSafe (Primer meetup Scala Perú Nov 2015)
Conociendo las tecnologías de TypeSafe (Primer meetup Scala Perú Nov 2015)Conociendo las tecnologías de TypeSafe (Primer meetup Scala Perú Nov 2015)
Conociendo las tecnologías de TypeSafe (Primer meetup Scala Perú Nov 2015)
 

More from Paradigma Digital

Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.
Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.
Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.Paradigma Digital
 
Programación Reactiva con Spring WebFlux
Programación Reactiva con Spring WebFluxProgramación Reactiva con Spring WebFlux
Programación Reactiva con Spring WebFluxParadigma Digital
 
Orquestando microservicios como lo hace Netflix
Orquestando microservicios como lo hace NetflixOrquestando microservicios como lo hace Netflix
Orquestando microservicios como lo hace NetflixParadigma Digital
 
Meetup microservicios: API Management
Meetup microservicios: API ManagementMeetup microservicios: API Management
Meetup microservicios: API ManagementParadigma Digital
 
Meetup de kubernetes, conceptos básicos.
Meetup  de kubernetes, conceptos básicos.Meetup  de kubernetes, conceptos básicos.
Meetup de kubernetes, conceptos básicos.Paradigma Digital
 
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptxDocker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptxParadigma Digital
 
Implementando microservicios
Implementando microserviciosImplementando microservicios
Implementando microserviciosParadigma Digital
 
Equipo de Marketing de Paradigma Digital
Equipo de Marketing de Paradigma DigitalEquipo de Marketing de Paradigma Digital
Equipo de Marketing de Paradigma DigitalParadigma Digital
 

More from Paradigma Digital (13)

Ddd + ah + microservicios
Ddd + ah + microserviciosDdd + ah + microservicios
Ddd + ah + microservicios
 
Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.
Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.
Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.
 
Have you met Istio?
Have you met Istio?Have you met Istio?
Have you met Istio?
 
Linkerd a fondo
Linkerd a fondoLinkerd a fondo
Linkerd a fondo
 
Horneando apis
Horneando apisHorneando apis
Horneando apis
 
Programación Reactiva con Spring WebFlux
Programación Reactiva con Spring WebFluxProgramación Reactiva con Spring WebFlux
Programación Reactiva con Spring WebFlux
 
Orquestando microservicios como lo hace Netflix
Orquestando microservicios como lo hace NetflixOrquestando microservicios como lo hace Netflix
Orquestando microservicios como lo hace Netflix
 
Meetup microservicios: API Management
Meetup microservicios: API ManagementMeetup microservicios: API Management
Meetup microservicios: API Management
 
Meetup de kubernetes, conceptos básicos.
Meetup  de kubernetes, conceptos básicos.Meetup  de kubernetes, conceptos básicos.
Meetup de kubernetes, conceptos básicos.
 
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptxDocker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
 
Implementando microservicios
Implementando microserviciosImplementando microservicios
Implementando microservicios
 
Equipo de Marketing de Paradigma Digital
Equipo de Marketing de Paradigma DigitalEquipo de Marketing de Paradigma Digital
Equipo de Marketing de Paradigma Digital
 
Seminario Apache Solr
Seminario Apache SolrSeminario Apache Solr
Seminario Apache Solr
 

Recently uploaded

pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilJuanGallardo438714
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfvladimiroflores1
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxMiguelAtencio10
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfAnnimoUno1
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxlosdiosesmanzaneros
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 

Recently uploaded (15)

pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmeril
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptx
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 

Programación Reactiva con RxJava

  • 3. 1. Qué es programación reactiva 2. RxJava 3. Experiencia en paradigma 4. Ejemplos ÍNDICE #paradigmarx
  • 4. Qué es programación reactiva ¿Por qué ahora? ¿Qué tiene de nuevo? ¿Es la próxima moda pasajera? ¿Ahora se programa todo así? #paradigmarx
  • 5. 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
  • 6. 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
  • 7. 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
  • 8. RxJava Fundamentos Para gestionar todo lo que ocurre, esta librería utiliza principalmente el patrón Observer #paradigmarx
  • 9. 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
  • 10. 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
  • 11. 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
  • 12. RxJava Eventos Un elemento observable puede producir 3 tipos de eventos : • Evento normal • Evento de terminación • Evento de error #paradigmarx
  • 13. 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
  • 14. 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
  • 16. 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
  • 17. 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
  • 18. 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
  • 19. 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
  • 20. RxJava Map Nos permite aplicar una transformación a un elemento de nuestro objeto para transformarlo en otra cosa. #paradigmarx
  • 21. RxJava Scan Aplica una función a cada dato emitido y emite ese valor secuencialmente #paradigmarx
  • 22. RxJava Reduce Aplica una función a cada dato emitido y emite el resultado #paradigmarx
  • 23. RxJava Buffer Permite almacenar un grupo de resultado y emitirlo como grupo #paradigmarx
  • 24. RxJava FlatMap Transforma cada elemento del observable en otra sucesión de observable, se suscribe y los une en único observable #paradigmarx
  • 25. RxJava GroupBy Divide el observable inicial en un conjunto de observables en base a un criterio. #paradigmarx
  • 26. RxJava Cache Almacena todos los resultados y los repite siempre igual. Hay que tener cuidado con la memoria si estamos manejando Observables infinitos #paradigmarx
  • 27. RxJava Filtrado Permiten descartar ciertos elementos y emitir sólo un subconjunto de los elementos iniciales. #paradigmarx
  • 28. RxJava Filter Realiza un filtrado sobre los eventos de origen #paradigmarx
  • 29. RxJava Distinct Elimina los duplicados #paradigmarx
  • 30. RxJava Otros • First • Last • Take , TakeLast,TakeUntil, TakeWhile • Skip, SkipLast, SkipUntil, SkipWhile #paradigmarx
  • 31. 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
  • 32. 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
  • 33. 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
  • 34. 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
  • 35. RxJava CombineLatest/Amb Permite realizar combinaciones con elementos sin que estén sincronizados #paradigmarx
  • 36. RxJava Temporales Permiten alterar el tiempo en la generación de eventos. #paradigmarx
  • 37. RxJava Timer Crea un observable para que emita un evento determinado en un tiempo predefinido. #paradigmarx
  • 38. RxJava Delay Retrasa la emisión de eventos por un determinado tiempo #paradigmarx
  • 39. RxJava Interval Emite una secuencia de números infinitos separados por un intervalo definido #paradigmarx
  • 40. RxJava Repeat Crea un Observable que repite un evento múltiples veces. #paradigmarx
  • 41. RxJava Retry Permite reconectar cuando se produce un error #paradigmarx
  • 42. RxJava Single Emite un único evento o da error #paradigmarx
  • 43. 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
  • 44. RxJava Try/catch RxJava nos permite varias formas de utilizar el try catch. Quizás una de las más legibles sea OnErrorResumeNext #paradigmarx
  • 45. 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
  • 46. 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
  • 47. RxJava Concurrencia Normalmente la concurrencia la va a decidir el que nos consume. Por ejemplo indicando suscribeOn(scheduler) o ObserverOn(Scheduler) #paradigmarx
  • 48. 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
  • 49. 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
  • 50. 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
  • 56. #paradigmarx Muchas gracias Buscamos talento : people@paradigmadigital.com