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

垂直。已写入x响应

周涵畅
2023-03-14

我面临着一个与垂直的问题。x、 当超时被触发时,它会生成一个响应,然后实际响应(需要10秒)出现并尝试进行响应,因此我得到:

JAVAlang.IllegalStateException:已写入响应

我是Vert的新手。x和我不确定想要的行为,我应该怎么做?,由于代码是异步的,我找不到检查响应是否已经发送的方法。

有没有办法做到这一点?

我有以下代码:

private void setExternalCallAccessibleWithCircuitBreaker() {

        CircuitBreaker breaker = CircuitBreaker.create("my-circuit-breaker", vertx,
                new CircuitBreakerOptions().setMaxFailures(3) // number of failure before opening the circuit
                        .setTimeout(1000) // consider a failure if the operation does not succeed in time
                        .setFallbackOnFailure(true) // do we call the fallback on failure
                        .setResetTimeout(10000) // time spent in open state before attempting to re-try
        );

        vertx.createHttpServer().requestHandler(req -> {

            // some code executing with the breaker
            // the code reports failures or success on the given future.
            // if this future is marked as failed, the breaker increased the
            // number of failures
            breaker.executeWithFallback(future -> {

                // call the external service
                WebClient client = WebClient.create(vertx);

                client.get(8080, "localhost", "/wait10Seconds").send(ar -> {
                    if (ar.succeeded()) {

                        HttpResponse<Buffer> response = ar.result();

                        System.out.println("Received response with status code" + response.statusCode());
                        System.out.println("response.bodyAsString()" + response.bodyAsString());

                        req.response().end(response.body());
                        future.complete();

                    } else {
                        System.out.println("Something went wrong " + ar.cause().getMessage());
                        req.response().end("error");
                        future.fail("not possible to complete the request");
                    }
                });

            }, (Throwable exception) -> {

                req.response().end("error " + exception.getMessage());
                return exception;

            }).setHandler(ar -> {
                // Get the operation result.
                System.out.println("ar: " + ar);
            });

        }).listen(8088);
        System.out.println("Running");
    }

共有1个答案

闾丘树
2023-03-14

我发现了这个方法,显然它是有效的:

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

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

  • 在Vert中使用HTTP服务器。x 2.1.6(基于Netty 4.0.21)为了处理HTTP请求,静态文件从文件系统读取并写入客户端。有时,在多个同时请求期间(阅读:快速单击浏览器),随机请求永远不会得到任何响应。E、 g.单击注销链接将触发对背景图像、徽标、几个css文件等的请求。所有文件都会成功返回,但徽标文件除外,http请求只是挂起了该文件。这种情况并不总是发生,但似乎是由于在启动新请求

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

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

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