2017-10-11 75 views
0

有没有更加健全的方式来编程下面的超级简单设置/获取/关闭测试程序?请注意,我必须复制Redis关闭代码并将其包含在设置错误路径和获取完整路径中。vert.x链接异步逻辑?

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()) 
    );