我试图以同步的方式使用Vertx,这就是为什么我试图使用vert-sync和函数如awaitEvent,awatResult。 我按照link这样做了。
以下是我尝试运行的行:
long tid = awaitEvent(h -> vertx.setTimer(1000, h));
System.out.println("Timer has now fired");
然而,我得到了以下错误:
sept. 25, 2017 11:25:41 PM io.vertx.ext.web.impl.RoutingContextImplBase
GRAVE: Unexpected exception in route
java.lang.StackOverflowError
at io.vertx.ext.web.impl.RoutingContextWrapper.request(RoutingContextWrapper.java:57)
at io.vertx.ext.web.impl.RoutingContextWrapper.request(RoutingContextWrapper.java:57)
at io.vertx.ext.web.impl.RoutingContextWrapper.request(RoutingContextWrapper.java:57)
at io.vertx.ext.web.impl.RoutingContextWrapper.request(RoutingContextWrapper.java:57)
at io.vertx.ext.web.impl.RoutingContextWrapper.request(RoutingContextWrapper.java:57)
at io.vertx.ext.web.impl.RoutingContextWrapper.request(RoutingContextWrapper.java:57)
你知道我怎么解决这个问题?
答案 0 :(得分:1)
这个简单的例子有效:
import co.paralleluniverse.fibers.Suspendable;
import io.vertx.core.Vertx;
import io.vertx.ext.sync.Sync;
import io.vertx.ext.sync.SyncVerticle;
public class SyncExample extends SyncVerticle {
public static void main(String[] args) {
Vertx vertx = Vertx.vertx();
vertx.deployVerticle(SyncExample.class.getName());
}
@Suspendable
@Override
public void start() throws Exception {
System.out.println("Waiting for single event");
long tid = Sync.awaitEvent(h -> vertx.setTimer(1000, h));
System.out.println("Single event has fired with timerId=" + tid);
}
}
生成的控制台输出为:
Waiting for single event
Waiting for single event
Single event has fired with timerId=0
相关的依赖关系(表示为maven坐标)是:
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-sync</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>co.paralleluniverse</groupId>
<artifactId>quasar-core</artifactId>
<version>0.7.9</version>
</dependency>
这个例子非常独立,所以你应该能够“按原样”抓住它。如果这对您不起作用,那么也许您可以使用其他详细信息更新您的问题,理想情况下提供MCVE,但至少向我们展示(a)定义您的Verticle的代码(所有这些不仅仅是少数同步调用周围的行)和(b)部署此Verticle的代码。