- vừa được xem lúc

Khái niệm có trong Axon Framework cần nắm

0 0 7

Người đăng: Thịnh Lang

Theo Viblo Asia

Axon framework là gì?



Có thể hiểu Axon framework là một framework hiện đại được ứng dụng phổ biến trong microservice để xây dựng các ứng dụng hướng dự kiện. Axon Framework dựa trên các nguyên tắc thiết kế như CQRS ( Command Query Responsibility Segregation ) và DDD (Domain Driven Design). Trong bài viết này chúng ta sẽ cùng nhau tìm hiểu làm thế nào để ứng dụng nó vào hệ thống microservice của chúng ta.

Axon Framework và Domain-Driven-Design

Axon Framework được lấy cảm hứng rất nhiều từ ý tưởng Domain-Driven-Design. Do đó sẽ có rất nhiều khái niệm bạn đọc có thể sẽ thấy quen nếu đã từng nghe và biết đến Domain-Driven-Design.

Hãy cùng nhìn qua các khái niệm dưới đây:

Aggregate

Giống như DDD, Axon Framework cũng sử dụng Aggregate như là tư tưởng chủ đạo của ứng dụng. Aggregate chỉ đơn giản là các Object bạn muốn theo dõi, quản lý (Domain Object). Nói ma mị một chút thì nó là hiện thân cho cả ứng dụng của bạn.

Cho dễ hình dung hơn thì trong ứng dụng Spring Boot sử sụng JPA thì annotation @Entity giống với @Aggregation vậy đó, với @Entity thì Spring Boot sẽ quản lý class đó còn đối với @Aggration thì Axon sẽ quản lý :vvvv

Domain-Events

Axon Framwork cũng bao gồm các khái niệm Domain-Events. Nói cách khác, khi các Command (Lệnh) được thực hiện bởi Aggregate sẽ khởi tạo thêm 1 hoặc nhiều event đi kèm. Các event này được gọi là Domain-Events.

Aggregate xử lý các event và dựa vào nó để thay đổi trạng thái của chính nó.

Đoạn code dưới đây, bạn sẽ thấy có những chỗ được gắn thẻ @EventSourcingHandler. Các hàm này sẽ được gọi khi các event gắn liền với chúng xuất hiện.

@EventSourcingHandler
protected void on(AccountCreatedEvent accountCreatedEvent){ this.id = accountCreatedEvent.id; this.accountBalance = accountCreatedEvent.accountBalance; this.currency = accountCreatedEvent.currency; this.status = String.valueOf(Status.CREATED); AggregateLifecycle.apply(new AccountActivatedEvent(this.id, Status.ACTIVATED));
} @EventSourcingHandler
protected void on(AccountActivatedEvent accountActivatedEvent){ this.status = String.valueOf(accountActivatedEvent.status);
}

Repository

Trong thuật ngữ Domain Driven, Repository là một khái niệm hết sức quan trọng. Repository là một thành phần dùng để quản lý vòng đời của Aggregate, nó có trách nhiệm lưu trữ và truy suất các Aggregate từ một data store nào đó có thể là In-memory, JPA hay JDBC, Mongo chẳng hạn.

Message Driven Aspect of Axon Framework

Nhắc đến Axon thì phải nhắc đến ứng dụng hướng sự kiện, các sự kiện thể hiện qua một khái niệm khác là Message. Message này chứa các thông tin liên quan đến payload, metadata bla bla... Có nhiều loại Message bao gồm:

Command

Command là một lệnh dùng để thay đổi trạng thái của ứng dụng. Lưu ý các command này chưa thật sự thay đổi trạng thái của nó, chỉ là ý định thay đổi mà thôi

Event

Trái ngược với Command khi event xuất hiện tức là đã có sự thay đổi trạng thái nào đó đã xảy ra. Cụ thể sẽ xuất hiện sau khi các command đã được xử lý thành công. Các event này chủ yếu dùng để gửi thông báo đến nơi cần được xử lý khi trạng thái ứng dụng bị thay đổi.

Query

Loại Message thứ ba này đơn giản chỉ là một request lấy thông tin nào đó, có thể là thông tin trạng thái hiện tại của ứng dụng

Trong bài viết này mình đã giới thiệu các khái niệm cần nắm trong Axon Framework. Chúng ta sẽ tìm hiểu kỹ hơn bằng cách xây dựng các ứng dụng Spring Boot với nó.

Hẹn gặp lại các bạn ở bài sau !!!

Bình luận

Bài viết tương tự

- vừa được xem lúc

Một Vài điều suy nghĩ về API GateWay

Trong bất kì một hệ thống sử dụng mô hình microservice nào đều có 1 cánh cổng thần kì =)). Đó là API GATEWAY.

0 0 32

- vừa được xem lúc

Microservice 001: Monolithic và sự hình thành của Microservice

Bài viết nằm trong series Microservice: What, when and how. Thời còn sinh viên, chúng ta đã quen thuộc với việc phát triển sản phẩm với mô hình Monolithic, nói nôm na là toàn bộ code được đóng gói và

0 0 73

- vừa được xem lúc

Keycloak Secure any application

In life, there are many problems posed to the software industry . But most of the software that we create has a security and decentralization mechanism and user management.

0 0 29

- vừa được xem lúc

Tìm hiểu về Service Mesh (phần tiếp theo)

Sau bài viết trước Tìm hiểu về Service Mesh là những khái niệm tổng quan về Service Mesh, Istio. Trong bài viết này, chúng ta sẽ tiếp tục tìm hiểu về Istio và thử triển khai Istio lên nhé .

0 0 199

- vừa được xem lúc

Viết ứng dụng Microservice với Golang

Cách xây dựng ứng dụng Microservice với Golang

0 0 89

- vừa được xem lúc

[MSDP] - CQRS Pattern

Trong bài viết này chúng ta sẽ cùng thảo luận về design pattern CQRS, đây là một Microservice Design Pattern để chia việc đọc và ghi dữ liệu trong ứng dụng một cách độc lập và lược đồ hóa dữ liệu một

0 0 29