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 !!!