Bài 4.Cách xây dựng và deploy một Verticle trong Vert.X Java Backend

Bài 3 ta đã điểm qua kiến trúc và cơ chế hoạt động của Vert.X. Bài này ta đi vào kỹ thuật xây dựng lớp kế thừa từ AbstractVerticle và cách deploy chúng.

Ta nên tạo 1 Event Loop cho một nhóm giao tác. Ví dụ như nhóm giao tác về Sản phẩm, về Hóa Đơn… có thể gom chung 1 Verticle.

Nhóm Phòng Ban, Nhân viên… có thể gom chung 1 Verticle.

Mỗi Model class như vậy là 1 REST, nhưng các REST có thể gom chung thành 1 Event Loop (Tạo 1 Verticle chung). Đây cũng là kiến trúc để sau này phát triển các hệ thống MicroServices.

Để cho dễ hiểu, bài học này Tui sẽ thử tạo 1 Verticle có API là lấy danh sách tên các Khóa Học.

Bây giờ ta tạo một Project tên là “TaoVerticle”, cách tạo Project xem tại đây.

Nhúng thư viện Vertx như đã học:

[code language=”java”]
dependencies {
testCompile group: ‘junit’, name: ‘junit’, version: ‘4.12’
compile ‘io.vertx:vertx-web:3.9.4’
}
[/code]

Sau đó tạo 1 lớp tên “MonHocVerticle”: Bằng cách bấm chuột phải vào java/chọn New / chọn Class

Đặt tên MonHocVerticle rồi double click vào Class

Kết quả:

Sau đó hiệu chỉnh coding cho lớp MonHocVerticle kế thừa từ lớp AbstractVerticle

Tiếp theo override phương thức start cho lớp MonHocVerticle. Lưu ý phần lý thuyết Override này được giảng rất kỹ trong môn Java cơ bản.

Bấm chuột phải vào coding của lớp MonHocVerticle-->chọn Generate

Sau đó chọn Override Methods…

Màn hình xuất hiện như dưới đây:

Ta chọn start(startPromise:Promise<Void>):void trong nhóm io.vertx.core.Verticle

nhấn OK:

Coding chỉ có như dưới đây:

[code language=”java”]
import io.vertx.core.AbstractVerticle;
import io.vertx.core.Promise;

public class MonHocVerticle extends AbstractVerticle
{
@Override
public void start(Promise startPromise) throws Exception {

}
}
[/code]

Ta bổ sung một hàm danhSachMonHoc, mục đích là xuất ra một mảng các môn học:

[code language=”java”]
import io.vertx.core.AbstractVerticle;
import io.vertx.core.Promise;
import io.vertx.core.json.Json;
import io.vertx.ext.web.RoutingContext;

public class MonHocVerticle extends AbstractVerticle
{
@Override
public void start(Promise startPromise) throws Exception {

}
private void danhSachMonHoc(RoutingContext routingContext) {
String []arrMonHoc=
{“C# cơ bản”,
“Java cơ bản”,
“Java nâng cao”,
“Java BackEnd”
};
routingContext.response()
.putHeader(“content-type”,”application/json;charset=utf-8″)
.end(Json.encodePrettily(arrMonHoc));
}
}
[/code]

Tiếp theo chỉnh sửa hàm start:

[code language=”java”]
import io.vertx.core.AbstractVerticle;
import io.vertx.core.Promise;
import io.vertx.core.json.Json;
import io.vertx.ext.web.Router;
import io.vertx.ext.web.RoutingContext;

public class MonHocVerticle extends AbstractVerticle
{
@Override
public void start(Promise startPromise) throws Exception {
Router router=Router.router(vertx);
router.get(“/api/monhocs”).handler(this::danhSachMonHoc);
vertx.createHttpServer()
.requestHandler(router::accept)
.listen(config().getInteger(“http.port”,8080),
result->{
if(result.succeeded())
{
startPromise.complete();
}
else
{
startPromise.fail(result.cause());
}
}
);
}
private void danhSachMonHoc(RoutingContext routingContext) {
String []arrMonHoc=
{“C# cơ bản”,
“Java cơ bản”,
“Java nâng cao”,
“Java BackEnd”
};
routingContext.response()
.putHeader(“content-type”,”application/json;charset=utf-8″)
.end(Json.encodePrettily(arrMonHoc));
}
}
[/code]

lệnh trên sẽ tạo API (api/monhocs) chạy ở port 8080. Nếu là localhost thì chạy theo:

http://localhost:8080/api/monhocs

Tui giải thích thêm một số chức năng của một số class:

1. Router

Router sẽ nhận yêu cầu từ HttpServer và có nhiệm vụ định tuyến cũng như tạo các API Method. Có rất nhiều phương thức được cung cấp bởi Router. Trong đó Ta cần nhớ các phương thức sau:

-Get–>HttpGet

-Post–>HttpPost

-Put–>HttpPut

-Delete–>HttpDelete

-route

Chi tiết các hàm: https://vertx.io/docs/apidocs/io/vertx/ext/web/Router.html

2. RoutingContext

  • RoutingContext dùng để xử lý các yêu cầu trong Vert.x-Web
  • Mỗi một đối tượng RoutingContext sẽ được tạo ra tương ứng với một Handler yêu cầu (có thể là get, post, put, delete…)
  • RoutingContext dùng để truy xuất HttpServerRequest và HttpServerResponse  để lấy dữ liệu từ Client gửi về cũng như xuất dữ liệu lại cho Client.
  • Ngoài ra nó cũng giúp ta truy suất: Session, cookies, body

Chi tiết các hàm: https://vertx.io/docs/apidocs/io/vertx/ext/web/RoutingContext.html

3. HttpServerResponse

  • Cho phép ta điều khiển các phản hồi giữa client và server. Được lấy ra từ RoutingContext
  • Cho phép stream file
  • Và nhiều tính năng khác

Chi tiết mô tả: https://vertx.io/docs/apidocs/io/vertx/core/http/HttpServerResponse.html

4. HttpServerRequest

Cho phép ta điều khiển lấy dữ liệu từ client. Request và Respone được tạo ra cùng lúc khi có 1 yêu cầu tương tác. Được lấy ra từ RoutingContext

Chi tiết mô tả: https://vertx.io/docs/apidocs/io/vertx/core/http/HttpServerRequest.html

Lưu ý: Ngoài ra ta chỉ cần sử dụng RoutingContext cũng có thể tương tác qua lại giữa Client – Server mỗi lần có handler xảy ra. Bản thân RoutingContext có thể truy suất trực tiếp response, request nên không nhất thiết phải tạo từng đổi tượng HttpServeRespone hay HttpServerRequest nữa.

Như vậy ở trên ta đã tạo được 1 Verticle tên là “MonHocVerticle”, bây giờ làm sao Deploy nó?

Để deploy một Verticle (hoặc nhiều verticle cùng lúc), ta tạo một lớp chứa hàm main để khởi tạo các Event loop:

Ta tạo thêm 1 class tên là “Universal”, bổ sung thêm hàm main như dưới đây:

[code language=”java”]
public class Universal {
public static void main(String[] args) {

}
}
[/code]

Chỉnh sửa coding cho main:

[code language=”java”]
import io.vertx.core.Vertx;

public class Universal {
public static void main(String[] args) {
Vertx vertx=Vertx.vertx();
vertx.deployVerticle(new MonHocVerticle());
}
}
[/code]

Deploy bằng cách nhấn vào biểu tượng hình tam giác màu xanh (ở bài này là dòng số 4): Nhấn vào nó xổ ra danh sách lựa chọn–>chọn Run ‘Universal.main()’

Chương trình sẽ được deploy và như dưới đây:

Mở phần mềm Postman hoặc trình duyệt lên để test:

Như vậy Tui đã hoàn thành xong bài hướng dẫn cách xây dựng Verticle trong Vert.X

Tạo được API monhocs thành công.

Coding các bạn tham khảo ở đây: https://www.mediafire.com/file/kxow0yg4uze5378/TaoVerticle.rar/file

Các bạn cố gắng làm lại nhiều lần để hiểu cách thức tạo 1 Verticle đơn giản nhé, ít nhất phải tạo được 1 API Get, lấy danh sách dữ liệu.

Các bài sau Tui sẽ trình bày chi tiết về các hàm GET, POST, PUT và DELETE

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

One thought on “Bài 4.Cách xây dựng và deploy một Verticle trong Vert.X Java Backend”

Leave a Reply