1

这是运行 verticles 的类:

public class RequestResponseExample {
    public static void main(String[] args) throws InterruptedException {
        Logger LOG = LoggerFactory.getLogger(RequestResponseExample.class);

        final Vertx vertx = Vertx.vertx();
        final Handler<AsyncResult<String>> RequestHandler = dar-> vertx.deployVerticle(new ResponseVerticle());

        vertx.deployVerticle(new ResponseVerticle(), RequestHandler);
    }
}

这是请求垂直类:

public class RequestVerticle extends AbstractVerticle{
    public static final Logger LOG = LoggerFactory.getLogger(RequestVerticle.class);
    static final String ADDRESS = "my.request.address";

    @Override
    public void start() throws Exception {
       
        Router router = Router.router(vertx);
        router.get("/Test").handler(rc -> rc.response().sendFile("index.html"));

        vertx.createHttpServer()
            .requestHandler(router)
            .listen(8080);
    }
}

这是响应垂直类:在这里我很难在 HTML 文件中获取插入的值

public class ResponseVerticle extends AbstractVerticle{
    public static final Logger LOG = LoggerFactory.getLogger(RequestVerticle.class);
    @Override
    public void start() throws Exception {

    Router router = Router.router(vertx);

    // How to handle the POST value ?
    router.post("/Test/Result").handler(rc -> rc.end("The Post Value"));

    vertx.createHttpServer()
            .requestHandler(router)
            .listen(8080);
}
4

1 回答 1

0

当用户调用 POST/Test/Result并发送一些 POST 值时,您会在 Response verticle 类(第三个片段)中收到它。如果您想与其他 Verticle 共享该方法,您应该将其存储在handler方法内的某个位置,以便其他 Verticle 访问它或立即通过事件总线将其转发给其他 Verticle。

一种可能的解决方案是创建StorageVerticle具有getset方法的第三个顶点(例如 )。这样,ResponseVerticle调用该set方法来存储它获得的值,并RequestVerticle调用该get方法来获取用户在调用 POST 方法时发送的值。

verticle 之间直接通信的另一种解决方案涉及事件总线消息交换——一个 verticle 发布/发送消息,所有其他 verticle 可以注册为消费者以获取该消息。您可以在此处找到更多信息:https ://vertx.io/docs/vertx-core/java/#_the_event_bus_api 。

很难说哪种方法更好,因为它是根据具体情况而定的,我在这里对项目范围的信息有限。

于 2022-02-07T12:24:17.367 回答