RxJava is a library for building asynchronous and event based services using simple and powerful api. During this workshop we will create an application composed from several smaller services. These services will process requests and responses in an asynchronous manner. We will investigate advantages and drawbacks of this approach and see how RxJava helps us express such API in a way that is clear, maintainable, composable and testable. Starting from very basic RxJava usages we will venture into more demanding use cases and look how such aspects of our application as monitoring, error handling, timeouts, logging, parallelism and back pressure. APIs of internal components will also be modeled as observable sequences. This exercise is not designed to make you adopt reactive approach in every possible corner of your codebase but rather to provide fresh look at how simple and complex tasks alike can be modeled as streams and provide insight into where RxJava is and where is not a good fit.