Vert.x - Как передать значение POST между вершинами?
Это класс, который запускает вершины:
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);
}
}
Это класс ответа на ответ: здесь у меня возникли трудности с получением значения Inserted в файле 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);
}
1 ответ
Когда пользователь вызывает POST
/Test/Result
и отправляет некоторое значение POST, вы получаете его в своем классе вершин ответа (третий фрагмент). Если вы хотите поделиться этим методом с другими вершинами, вы должны сохранить его где-то внутри
handler
чтобы другие вершины обращались к нему или немедленно пересылали его другим вершинам через шину событий.
Одним из возможных решений было бы создание третьей вершины (например,
StorageVerticle
), который имеет и методы. Туда,
ResponseVerticle
вызывает
set
метод для сохранения полученного значения, а
RequestVerticle
вызывает
get
метод для получения значения, отправленного пользователем при вызове метода POST.
Другое решение прямой связи между вершинами включает обмен сообщениями по шине событий — одна вершина публикует/отправляет сообщение, а все остальные вершины могут зарегистрироваться как потребители для получения этого сообщения. Подробнее об этом вы можете узнать здесь: https://vertx.io/docs/vertx-core/java/#_the_event_bus_api.
Трудно сказать, какой подход лучше, потому что это зависит от конкретного случая, и у меня есть ограниченная информация о масштабах проекта.