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

Gaj*_*ora 1 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);
}
Run Code Online (Sandbox Code Playgroud)

}

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

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

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

vertx.deployVerticle("com.....HttpServerVerticle", deploymentOptions);
Run Code Online (Sandbox Code Playgroud)

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

小智 5

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