Go Reactive - RxJava Example

The following code shows how to use RxJava Observable to create service , and how to call it asynchronously and synchronously in client side.
    public static void main(final String[] args) throws InterruptedException {
        Observable<Void> observable = createAsycService();
        asyncObservableClient(observable);

        observable = createAsycService();
        syncObservableClient(observable);

        LOGGER.info("main-wait for some time");
        Thread.sleep(1000 * 10);
        LOGGER.info("main-finished");
    }

    private static Observable<Void> createAsycService() {
        final Observable<Void> observable = Observable.<Void>create(new OnSubscribe<Void>() {
            @Override
            public void call(final Subscriber<? super Void> subscriber) {
                LOGGER.info("service-started");
                try {
                    Thread.sleep(1000 * 2);
                } catch (final InterruptedException e) {
                    e.printStackTrace();
                }
                LOGGER.info("service-finished");
                // we should always call onNext(), so sync client can handle it easily.
                subscriber.onNext(null);
                // tell observer we are done
                subscriber.onCompleted();
            }
        }).subscribeOn(Schedulers.newThread());
        return observable;
    }

    private static void syncObservableClient(final Observable<Void> observable) {
        LOGGER.info("sync-client-started");

        final BlockingObservable<Void> blockingObservable = observable.timeout(5, TimeUnit.SECONDS).toBlocking();
        blockingObservable.last();
        LOGGER.info("sync-client-finished");
    }

    private static void asyncObservableClient(final Observable<Void> observable) {
        observable.subscribe(new Subscriber<Void>() {
            @Override
            public void onCompleted() {
                LOGGER.info("async-client-finished");
            }

            @Override
            public void onError(final Throwable e) {
                LOGGER.info("async-client:" + e.getMessage());
            }

            @Override
            public void onNext(final Void t) {
                LOGGER.info("async-client-received:" + t);
            }
        });
    }
Resources:
Post a Comment

Labels

Java (159) Lucene-Solr (112) Interview (61) All (58) J2SE (53) Algorithm (45) Soft Skills (38) Eclipse (33) Code Example (31) Linux (25) JavaScript (23) Spring (22) Windows (22) Web Development (20) Tools (19) Nutch2 (18) Bugs (17) Debug (16) Defects (14) Text Mining (14) J2EE (13) Network (13) Troubleshooting (13) PowerShell (11) Chrome (9) Design (9) How to (9) Learning code (9) Performance (9) Problem Solving (9) UIMA (9) html (9) Http Client (8) Maven (8) Security (8) bat (8) blogger (8) Big Data (7) Continuous Integration (7) Google (7) Guava (7) JSON (7) Shell (7) ANT (6) Coding Skills (6) Database (6) Lesson Learned (6) Programmer Skills (6) Scala (6) Tips (6) css (6) Algorithm Series (5) Cache (5) Dynamic Languages (5) IDE (5) System Design (5) adsense (5) xml (5) AIX (4) Code Quality (4) GAE (4) Git (4) Good Programming Practices (4) Jackson (4) Memory Usage (4) Miscs (4) OpenNLP (4) Project Managment (4) Spark (4) Testing (4) ads (4) regular-expression (4) Android (3) Apache Spark (3) Become a Better You (3) Concurrency (3) Eclipse RCP (3) English (3) Happy Hacking (3) IBM (3) J2SE Knowledge Series (3) JAX-RS (3) Jetty (3) Restful Web Service (3) Script (3) regex (3) seo (3) .Net (2) Android Studio (2) Apache (2) Apache Procrun (2) Architecture (2) Batch (2) Bit Operation (2) Build (2) Building Scalable Web Sites (2) C# (2) C/C++ (2) CSV (2) Career (2) Cassandra (2) Distributed (2) Fiddler (2) Firefox (2) Google Drive (2) Gson (2) How to Interview (2) Html Parser (2) Http (2) Image Tools (2) JQuery (2) Jersey (2) LDAP (2) Life (2) Logging (2) Python (2) Software Issues (2) Storage (2) Text Search (2) xml parser (2) AOP (1) Application Design (1) AspectJ (1) Chrome DevTools (1) Cloud (1) Codility (1) Data Mining (1) Data Structure (1) ExceptionUtils (1) Exif (1) Feature Request (1) FindBugs (1) Greasemonkey (1) HTML5 (1) Httpd (1) I18N (1) IBM Java Thread Dump Analyzer (1) JDK Source Code (1) JDK8 (1) JMX (1) Lazy Developer (1) Mac (1) Machine Learning (1) Mobile (1) My Plan for 2010 (1) Netbeans (1) Notes (1) Operating System (1) Perl (1) Problems (1) Product Architecture (1) Programming Life (1) Quality (1) Redhat (1) Redis (1) Review (1) RxJava (1) Solutions logs (1) Team Management (1) Thread Dump Analyzer (1) Visualization (1) boilerpipe (1) htm (1) ongoing (1) procrun (1) rss (1)

Popular Posts