Interested Article - Vert.x

История

Eclipse Vert.x — многоязыковой ( Java , Kotlin , JavaScript , Groovy ) асинхронный веб- фреймворк работающий на событийно-ориентированной архитектуре и запускается поверх JVM .

Vert.x начал разрабатывать Tim Fox в 2011 пока он работал в VMware .

С версии 2.1.4, Vert.x предоставляет свой API на Java , JavaScript , Groovy , Ruby , Python , Scala , Clojure и Ceylon .

С версии 3.7.0, Vert.x предоставляет свой API на Java, JavaScript, Groovy, Ruby, Scala, Kotlin and Ceylon.

С версии 3.9.1, Vert.x предоставляет свой API на Java, JavaScript, Groovy, Ruby, Scala and Kotlin.

12 января 2016 Tim Fox ушел с поста руководителя проекта Vert.x и на его место встал Julien Viet.

Архитектура

Vert.x использует в своей работе неблокирующий клиенто-серверный фреймворк Netty.

Verticle — это аналог сервлета(или «актора») и является атомарной единицей развёртывания в приложении. Есть 2 типа: Стандартный и Рабочий .

public class MyVerticle extends AbstractVerticle {
 // Called when verticle is deployed
 public void start() {
 }
 // Optional - called when verticle is undeployed
 public void stop() {
 }
}

Handler — обработчик событий внутри Verticle.

HttpServer server = vertx.createHttpServer();
// Router
Router router = Router.router(vertx);
// set Handler for every request
router.route().handler(ctx -> {
  // This handler will be called for every request
  HttpServerResponse response = ctx.response();
  response.putHeader("content-type", "text/plain");
  // Write to the response and end it
  response.end("Hello World from Vert.x-Web!");
});
server.requestHandler(router).listen(8080);

Router — главный компонент по поиску совпадений для пришедшего запроса.

Route route = router.route("/some/path/");
Route route = router.route().path("/some/path/");
route.handler(ctx -> {
  // This handler will be called for the following request paths:

  // `/some/path/`
  // `/some/path//`
  //
  // but not:
  // `/some/path` the end slash in the path makes it strict
  // `/some/path/subdir`
});
//router for POST request
router.post("/some/endpoint").handler(ctx -> {
  ctx.request().setExpectMultipart(true);
  ctx.next();
});
//router for GET request
router
  .get("/some/path")
  .respond(
    ctx -> ctx
      .response()
        .putHeader("Content-Type", "text/plain")
        .end("hello world!"));

Возможности

  • Компоненты могут быть написаны на таких языках как: Java, JavaScript, Groovy, Ruby, Scala, Kotlin и Ceylon.
  • Простая асинхронная модель позволяющая писать масштабируемые и неблокирующие приложения.
  • Шина событий позволяющая передавать сообщения как внутри приложения, так и между его узлами (нодами).
  • Модель «акторов» позволяющая запускать «тяжелые» процессы в для обработки данных или их получении.
  • Интеграция с шаблонным движками (MVEL, Jade, Handlebars, Thymeleaf, Apache FreeMarker, Pebble, Rocker, HTTL, Rythm)
  • Vert.x 3 требует версии Java не ниже 8

Реализация следующих свойств:

  1. Кластеризация через Hazelcast, Infinispan и так далее.
  2. Тестирование через JUnit 5
  3. Подключение к разным Базам Данных( JDBC , MySQL , PostgreSQL , DB2 , MSSQL , MongoDB , Redis , Cassandra )
  4. Очереди сообщений ( Kafka , RabbitMQ , AMQP , MQTT )
  5. Авторизация через сторонние службы (JWT Auth, Oauth2 Auth)
  6. Мониторинг работы приложения (Zipkin, OpenTelemetry)
  7. Интеграция с различными протоколами как STOMP, SMTP и так далее.
  8. Shell — оболочка выполнения задач сервером.
  9. Интерфейс для разработки TCP, HTTP и UDP серверов и клиентов.
  10. Интерфейс для работы с файловой системой.
  11. Launcher запускающий приложение из архива jar.
  12. Реактивное программирование приложения при поддержке (RxJava 1, RxJava 2, RxJava 3, Mutiny)

Примеры

Запуск http-сервера на Java:

import io.vertx.core.AbstractVerticle;

public class Server extends AbstractVerticle {
  public void start() {
    vertx.createHttpServer().requestHandler(req -> {
      req.response()
        .putHeader("content-type", "text/plain")
        .end("Hello from Vert.x!");
    }).listen(8080);
  }
}

Ссылки

  1. Дата обращения: 28 июня 2022. 26 мая 2022 года.
  2. . Дата обращения: 28 июля 2020. 19 мая 2021 года.
 - GitHub страница проекта.
 - Последние изменения в релизе.
Источник —

Same as Vert.x