当前位置: 首页 > 知识库问答 >
问题:

垂直。x链接异步逻辑?

子车鸿运
2023-03-14

有没有一种更理智的方法来编程以下超级简单的设置/获取/关闭测试程序?请注意,我必须复制 Redis 关闭代码,并将其包含在设置错误路径和获取完整路径中。

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");
    }
}

共有1个答案

唐默
2023-03-14

我推荐看reactive API < code > io . vertx . rx Java . redis . redis client 。这对于链式计算来说是极好的(它的主要目的)。

例如(我没有测试过这段代码):

    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())
      );
 类似资料:
  • 我对Vert.x非常陌生,就像几天前一样。我来自一个JAX式的,安逸的世界。我可能大错特错,请指正。 我的问题是:如何使顶点公开自己的REST接口(子路由器),以及如何将其子路由器注册到应用程序的主路由器中? 我尝试过类似的东西,但是当我请求/产品/所有:( } }

  • 我刚刚开始学习vert. x,对它是如何工作的仍然感兴趣...我在想: 当反应性非阻塞垂直线卸载到阻塞垂直线时,阻塞垂直线在工作线程上运行。 1.what事件循环线程,关闭加载的工作,在同一时间?从循环中获取另一个事件? 返回a结果时,同一事件循环是否继续执行?还是另一个? 1的答案是什么 我觉得我错过了一些基本的东西,关于事情实际上是如何工作的。谢谢你的帮助!

  • 我正在尝试为Vert开发概念验证。一款简单的实时浏览器游戏。 让我们想象一个类似于在线扑克的游戏——你有一个大厅,里面有许多你可以加入的现有游戏。你也可以创建一个新游戏(所以大厅里的游戏数量是可变的)。在这之前,你有一个异步超文本传输协议服务器(集群),玩家可以连接到它。尤其是在特定的游戏中,一切都是实时的,所以当玩家执行某个操作时,其他人会立即看到它,而无需刷新或定期ajax轮询。 我在考虑如何

  • 假设我有一个类似这样的竖线(有意简化以便于解释我的问题)。 现在想象一下,MyService是事件驱动的,当服务中发生某些事件时,我想停止顶点。 是否有人对Vert有更多经验。x知道如何做到这一点?或者,也许有人会给我一些建议,告诉我什么是正确的替代方法?

  • 我有下面的垂直类: 我的html文件是: 我使用了“StaticHandler.create…”以便为客户端文件夹中的所有静态文件提供服务。正如您所理解的,我希望一旦服务器收到对“localhost:3000/hello”的GET请求,客户端将获得一个HTML页面,该页面将调用app。js文件。 不幸的是,我做不到。指数html已加载,浏览器无法加载应用程序。js。 重要的是要注意该索引。html

  • 我面临着一个与垂直的问题。x、 当超时被触发时,它会生成一个响应,然后实际响应(需要10秒)出现并尝试进行响应,因此我得到: JAVAlang.IllegalStateException:已写入响应 我是Vert的新手。x和我不确定想要的行为,我应该怎么做?,由于代码是异步的,我找不到检查响应是否已经发送的方法。 有没有办法做到这一点? 我有以下代码: