2017-10-11 2 views
0

다음과 같은 간단한 간단한 설정/가져 오기/닫기 테스트 프로그램을 프로그래밍하는 더 정상적인 방법이 있습니까? Redis close 코드를 복제하여 set error path와 get complete path에 모두 포함시켜야했습니다.vert.x chaining async logic?

import io.vertx.core.Vertx; 
import io.vertx.redis.RedisClient; 
import io.vertx.redis.RedisOptions; 

public class RedisTest { 
    public static void main(String[] args) throws Exception { 
     Vertx vertx = Vertx.vertx(); 

     String host = "localhost"; 

     final RedisClient client = RedisClient.create(vertx, 
       new RedisOptions().setHost(host)); 

     client.set("key", "value", r -> { 
      if (r.succeeded()) { 
       System.out.println("key stored"); 

       client.get("key", s -> { 
        if (s.succeeded()) { 
         System.out.println("Retrieved value: " + s.result()); 
        } else { 
         System.out.println("Connection or Operation Failed " + s.cause()); 
        } 

        System.out.println("Closing Redis connection"); 
        client.close(t -> { 
         if (s.succeeded()) { 
          System.out.println("Redis closed successfully."); 
         } else { 
          System.out.println("Connection or Operation Failed " + t.cause()); 
         } 

         System.out.println("Closing vertx"); 
         vertx.close(); 
        }); 
       }); 
      } else { 
       System.out.println("Connection or Operation Failed " + r.cause()); 

       System.out.println("Closing Redis connection"); 
       client.close(s -> { 
        if (s.succeeded()) { 
         System.out.println("Redis closed successfully."); 
        } else { 
         System.out.println("Connection or Operation Failed " + s.cause()); 
        } 

        System.out.println("Closing vertx"); 
        vertx.close(); 
       }); 
      } 
     }); 

     System.out.println("Exiting main"); 
    } 
} 

답변

2

나는 반응 API를 io.vertx.rxjava.redis.RedisClient를 참조하시기 바랍니다. 체인화 된 계산을위한 (주요 목적) 우수합니다.

예를 들어 (이 코드를 테스트하고 있지 않다) :

client.rxSet("key", "value") 
     .flatMap(r -> client.rxGet("key")) 
     //calls on error or success 
     .doAfterTerminate(() -> { 
      client.rxClose(); 
      vertx.close(); 
     }) 
     .subscribe(
     success -> System.out.println("Chain completed"), 
     //all errors will be there 
     error -> System.out.println(error.getMessage()) 
    );