vert.x中的多实例verticle是线程安全的

时间:2019-01-30 08:26:33

标签: thread-safety vert.x

我了解到,在vert.x中,默认情况下,每次不需要在处理程序中编写线程安全性时,Verticle都会在同一事件循环中运行。

例如,如果我有一个运行HttpServer的Verticle-

public class HttpServerVerticle extends AbstractVerticle {
@Override
public void start() throws Exception {
    vertx.createHttpServer().requestHandler(req -> {
        req.response().putHeader("content-type", "text/html").end(" 
    <html><body><h1>Hello from vert.x!</h1></body></html>");
    }).listen(8080);
}

}

保证在任何时间点,我的请求处理程序将在2个事件循环中被调用两次(针对2个不同的请求)。因此,我不必在请求处理程序中照顾线程安全。

现在,如果我正在运行HttpServer verticle的多个实例-

DeploymentOptions deploymentOptions = new 
        DeploymentOptions().setWorker(false).setInstances(10);

vertx.deployVerticle("com.....HttpServerVerticle", deploymentOptions);

我需要注意线程安全吗?可能有多个请求处理程序(最大= 10)将并行运行?

1 个答案:

答案 0 :(得分:2)

在这种情况下,您得到的是10个顶点,并且将以循环方式在这10个顶点之间调度HTTP请求。每个顶点将分配给一个事件循环,您将拥有相同的线程安全保证。