Vertx là một Web Framework được dùng để tạo ra các Rest Service nhanh chóng và tiện lợi. Vertx hỗ trợ nhiều nền tảng ngôn ngữ khác nhau trên nền tảng JVM như Java, Kotlin, Scala, Ruby và cả Javascript.

1. Các ưu điểm:

Phát huy sức mạnh của JVM cộng với cơ chế non-blocking

Vertx có cơ chế vận hành giống như NodeJS là tạo ra một Single Thread Loop liên tục nhận các request từ Client theo cơ chế non-blocking. Bên cạnh đó Vertx còn có ưu thế là tận dụng được các thế mạnh từ nền tảng JVM có thể tận dụng được sức mạnh của CPU đa nhân, trong khi đó NodeJS chỉ có thể sử dụng được 1 core. Vertx có thể vừa đảm nhận xử lý các heavy request yêu cầu sức mạnh xử lý của toàn bộ nhân CPU mà còn có thể xử lý song song những tác vụ đó.

Được sự hỗ trợ mạnh mẽ từ cộng đồng và doanh nghiệp

Vertx là một sản phẩm open source hoàn toàn được phát hành bởi hãng Eclipse nổi tiếng với sự tận dụng sức mạnh của cộng đồng mã nguồn mở. Dù đứng bên cạnh những Framework đình đám như Spring, EJB đã khẳng định được tên tuổi của mình từ rất lâu, Vertx vẫn có những thế mạnh riêng của mình trong thị trường Rest Web Service. Ngày nay khi các project vừa và nhỏ được bắt đầu, các lập trình viên đã có nhiều sự lựa chọn hơn cho nền tảng Hệ Thống không còn bó buộc như trước. 

Vertx có cú pháp lập trình đơn giản, phần nào nhìn giống với NodeJS, có lẽ các nhà phát triển của Vertx muốn quảng bá sự mạnh mẽ của JVM hay của Java đến với các cộng đồng đang sử dụng NodeJS. 

Hỗ trợ nhiều nền tảng công nghệ mới;

Để có thể cạnh tranh với các Web Framwork gạo cội, Vertx đã có được ưu thế riêng của mình khi hỗ trợ được nền tảng HTTP 2.0 với Reactive Processing, OpenApi 3, và cả GrapQL. Nhưng bên cạnh đó Vertx vẫn hỗ trợ những nền tảng vẫn còn đang được sử dụng phổ biến như:

  • Messaging với RabitMQ Client, AMQP Client, ...
  • Kết nối với SQL Database: MySQL, MS SQL Server, ...
  • Kết nối với NoSQL Database: MongoDB, Cassandra, ...
  • Cache với Redis
  • Authentication: JWT, OAuth2,  Apache Shiro Auth, MongoDB auth, ...
  • Mail Intergration.
  • Hỗ trợ Big Data với Kafka Client 
  • Hỗ trợ các phiên bản JDK từ 9 trở lên

 

2. Ví dụ:

Để bắt đầu với Vertx nói riêng hay với các Web Framework Java hiện nay có thể nói ngày càng được đơn giản hoá, biết đâu sau này những thế hệ không còn biết đến JSP, Servlet hay phải config Framewwork bằng hàng tá file XML với những thông số khó nhớ. Và như mọi khi, mọi thứ bắt đầu với thư viện Maven nhé.

Maven

<project xmlns="https://maven.apache.org/POM/4.0.0"
         xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://maven.apache.org/POM/4.0.0
                      https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>thecoderoot</groupId>
  <artifactId>vertx-hellworld</artifactId>
  <version>1.0-SNAPSHOT</version>

  <dependencies>
    <dependency>
      <groupId>io.vertx</groupId>
      <artifactId>vertx-core</artifactId>
      <version>3.0.0</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.3</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>

</project>

 

Tạo class Vertx Service:

import io.vertx.core.AbstractVerticle;
import io.vertx.core.Future;

public class MyFirstVerticle extends AbstractVerticle {

  @Override
  public void start(Future<Void> fut) {
    vertx
        .createHttpServer()
        .requestHandler(r -> {
          r.response().end("<h1>Hello from my first " +
              "Vert.x 3 application</h1>");
        })
        .listen(8080, result -> {
          if (result.succeeded()) {
            fut.complete();
          } else {
            fut.fail(result.cause());
          }
        });
  }
}

Các config chính của application chúng ta đều ở đây. Ví dụ này chỉ đơn giản trả về 1 dòng HTML khi người dùng truy cập vào đường dẫn

https://localhost:8080

Hoặc in ra log lỗi nếu ứng dụng bị lỗi.

Đóng gói ứng dụng với Maven:

Thêm maven plugin sau:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-shade-plugin</artifactId>
  <version>2.3</version>
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>shade</goal>
      </goals>
      <configuration>
        <transformers>
          <transformer
            implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
            <manifestEntries>
              <Main-Class>io.vertx.core.Starter</Main-Class>
              <Main-Verticle>io.vertx.blog.first.MyFirstVerticle</Main-Verticle>
            </manifestEntries>
          </transformer>
        </transformers>
        <artifactSet/>
        <outputFile>${project.build.directory}/${project.artifactId}-${project.version}-fat.jar</outputFile>
      </configuration>
    </execution>
  </executions>
</plugin>
mvn clean package

Và chạy gói Jar

java -jar target xxx-fat.jar

Và sau đó chúng ta có thể truy cập vào web app trên bằng đường dẫn 

https://localhost:8080

Chúc các bạn thành công.

AutoCode.VN

minhnhatict@gmail.com Vertx Framework