Sử dụng Hystrix và Hystrix Dashboard từ Spring Cloud Netflix trong ứng dụng Reactive Web Service với Spring WebFlux

Mình đã giới thiệu với các bạn về HystrixHystrix Dashboard với những vấn đề mà chúng giải quyết trong một hệ thống Microservices. Đối với những ứng dụng Reactive Web Service, việc sử dụng Hystrix và Hystrix Dashboard sẽ khác một xíu. Hiện tại, annotation @HystrixCommand sẽ không work với các ứng dụng Reactive Web Service mà chúng ta phải sử dụng class HystrixCommands để giải quyết vấn đề của mình. Cụ thể như thế nào? Trong bài viết này, mình sẽ trình bày với các bạn cách sử dụng Hystrix và Hystrix Dashboard từ Spring Cloud Netflix trong ứng dụng Reactive Web Service với Spring WebFlux các bạn nhé!

Để làm ví dụ cho bài viết này, mình sẽ sử dụng Reactive Web Service mà mình đã tạo trong bài viết về Reactive Web Service sử dụng Spring WebFlux.

Mình sẽ expose thêm một request URL trong Reactive Web Service này như sau:

Mình sẽ tạo mới một ứng dụng khác sử dụng WebClient để consume Reactive Web Service trên với Hystrix và Hystrix Dashboard như sau:

Sử dụng Hystrix và Hystrix Dashboard từ Spring Cloud Netflix trong ứng dụng Reactive Web Service với Spring WebFlux

Kết quả:

Sử dụng Hystrix và Hystrix Dashboard từ Spring Cloud Netflix trong ứng dụng Reactive Web Service với Spring WebFlux

Tiếp theo, mình sẽ thêm mới một request URL sử dụng WebClient để consume Reactive Web Service trong bài viết này. Controller của mình có nội dung như sau:

Vì hiện tại Reactive Web Service đang chạy trên port 8080 nên mình sẽ thêm property server.port trong tập tin application.properties của ứng dụng này với giá trị 8081 để ứng dụng này chạy trên port khác.

Chạy cả 2 ứng dụng và kết quả khi mình request tới địa chỉ http://localhost:8081/consume-hello sẽ như sau:

Sử dụng Hystrix và Hystrix Dashboard từ Spring Cloud Netflix trong ứng dụng Reactive Web Service với Spring WebFlux

OK, bây giờ mình sẽ sử dụng Hystrix để hiện thực Circuit Breaker, khi Reactive Web Service không available thì ứng dụng của chúng ta sẽ trả về giá trị mặc định các bạn nhé.

Để làm được điều này, mình sẽ thêm annotation @EnableCircuitBreaker vào class main của ứng dụng như sau:

Như mình đã nói, annotation @HystrixCommand hiện tại chưa work với Spring WebFlux mà chúng ta sẽ sử dụng class HystrixCommands như sau:

Như các bạn thấy, sử dụng HystrixCommands chúng ta sẽ tạo một fallback từ đối tượng Flux hoặc Mono được trả về. Command name ở đây là tên gọi sẽ dùng để phân biệt, giúp chúng ta có thể biết được calling request URL nào đang có vấn đề.

Nếu bây giờ các bạn stop Reactive Web Service, restart lại ứng dụng rồi request lại URL http://localhost:8081/consume-hello, kết quả sẽ như sau:

Sử dụng Hystrix và Hystrix Dashboard từ Spring Cloud Netflix trong ứng dụng Reactive Web Service với Spring WebFlux

Bây giờ chúng ta thử cấu hình để sử dụng Hystrix Dashboard các bạn nhé.

Chúng ta cần thêm annotation @EnableHystrixDashboard trong class main của ứng dụng như sau:

Tiếp theo chúng ta sẽ cấu hình để Actuator enable API cung cấp data cho Hystrix Dashboard trong tập tin application.properties như sau:

OK, bây giờ các bạn thử truy cập vào đường dẫn http://localhost:8081/hystrix, nhập http://localhost:8081/actuator/hystrix.stream, nhấn “Monitor Stream” rồi request tới địa chỉ http://localhost:8081/consume-hello, các bạn sẽ thấy Hystrix Dashboard hiển thị như sau:

Sử dụng Hystrix và Hystrix Dashboard từ Spring Cloud Netflix trong ứng dụng Reactive Web Service với Spring WebFlux

Start lại Reactive Web Service, các bạn sẽ thấy kết quả như sau trong Hystrix Dashboard khi request tới http://localhost:8081/consume-hello:

Sử dụng Hystrix và Hystrix Dashboard từ Spring Cloud Netflix trong ứng dụng Reactive Web Service với Spring WebFlux

Không lỗi nào được hiển thị cả, nhưng có vẻ hiện tại với Spring WebFlux, Hystrix Dashboard chưa hiển thị được số request success các bạn ạ.

Sử dụng Hystrix và Hystrix Dashboard từ Spring Cloud Netflix trong ứng dụng Reactive Web Service với Spring WebFlux
2 (40%) 1 vote
Chia sẽ bài viết này ...Share on Facebook
Facebook
5Tweet about this on Twitter
Twitter
Share on LinkedIn
Linkedin

Add Comment

Website này sử dụng Akismet để hạn chế spam. Tìm hiểu bình luận của bạn được duyệt như thế nào.