Circuit Breaker Spring Boot là gì

Trong một mạng lưới hệ thống Microservice, việc bảo vệ những service luôn available là một điều quan trọng giúp cho ứng dụng của tất cả chúng ta hoàn toàn có thể hoạt động giải trí không thay đổi. Chúng ta hoàn toàn có thể sử dụng load balancer để triển khai điều này, thế nhưng không ai hoàn toàn có thể chắc như đinh việc sử dụng load balancer hoàn toàn có thể bảo vệ 100 % những service luôn available được. Chúng ta cần có một chính sách để khi gặp bất kể yếu tố gì, ví dụ như service mà tất cả chúng ta cần gọi không response hay response vượt quá thời hạn timeout thì ứng dụng của tất cả chúng ta vẫn có cách để chạy với giá trị response mặc định từ service đó. Nếu những bạn đang muốn hiện thực sáng tạo độc đáo này thì hoàn toàn có thể sử dụng Hystrix từ Netflix OSS hoặc một wrapper của nó từ Spring Cloud Netflix. Cụ thể như thế nào ? Trong bài viết này, mình sẽ trình diễn với những bạn những bước để sử dụng Hystrix từ Spring Cloud Netflix những bạn nhé !

Để làm ví dụ cho bài viết này, mình sẽ sử dụng service “Eureka Client Example” mà mình đã tạo trong bài viết này về Eureka Client với một request URL “/hello” trả về dòng text “Hello !!!” mà mình đã thêm trong bài viết này. Mặc định service này sẽ cố gắng tìm Eureka Server để đăng ký nên các bạn sẽ thấy nhiều error xuất hiện. Không sao cả, các bạn có thể ignore những error đó đi.

Bạn đang đọc: Tìm hiểu về Hystrix của Spring Cloud Netflix – Hướng Dẫn Java

Bây giờ, mình sẽ tạo mới một Spring Boot project với một request URL gọi tới request “/hello” của service “Eureka Client Example” và sử dụng Hystrix để trong trường hợp service “Eureka Client Example” không available thì request này cũng sẽ trả về kết quả cho người dùng.

Project của mình như sau :

Kết quả :

Mình sẽ thêm mới một controller gọi tới request “/hello” của service “Eureka Client Example” với đối tượng RestTemplate như sau:

123456789101112131415

packagecom.huongdanjava.springcloudhystrix;

importorg.springframework.web.bind.annotation.GetMapping;

importorg.springframework.web.bind.annotation.RestController;

importorg.springframework.web.client.RestTemplate;

@ RestController

publicclassHystrixExampleController{

@ GetMapping[” / call-hello “]

publicStringcallHello[]{

returnnewRestTemplate[].getForObject[” //localhost:8080/hello “,String.class];

}

}

Vì service “ Eureka Client Example ” đã chạy trên port 8080 rồi nên mình sẽ config để ứng dụng này của tất cả chúng ta run trên port 8180 bằng cách thông số kỹ thuật property server.port trong tập tin application.properties như sau :

Chạy cả 2 ứng dụng và tác dụng khi tất cả chúng ta request tới URL //localhost:8180/call-hello sẽ như sau :

Sẽ như thế nào nếu những bạn stop service “ Eureka Client Example ” đi !
Kết quả :

Các bạn thấy đó, một error sẽ xảy ra khi service “ Eureka Client Example ” bị stop đi. Các bạn hãy tưởng tượng sẽ như thế nào nếu đây là một service trong một mạng lưới hệ thống Microservice ? Để xử lý yếu tố này với Hystrix của Spring Cloud Netflix, những bạn cần làm những bước sau :

Đầu tiên, những bạn cần khai báo annotation @ EnableCircuitBreaker của Hystrix vào trong class main của ứng dụng như sau :

123456789101112131415

packagecom.huongdanjava.springcloudhystrix;

importorg.springframework.boot.SpringApplication;

importorg.springframework.boot.autoconfigure.SpringBootApplication;

importorg.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;

@ SpringBootApplication

@ EnableCircuitBreaker

publicclassSpringCloudHystrixApplication{

publicstaticvoidmain[String[]args]{

Xem thêm: Xem Nhiều 11/2021 # Giá Bạc Ptsj 950 Mới Nhất # Top Trend

SpringApplication.run[SpringCloudHystrixApplication.class,args];

}

}

Có thể có bạn sẽ quá bất ngờ với tên gọi Circuit Breaker của annotation này, mình xin nói với những bạn là : với những yếu tố mà tất cả chúng ta discuss ở trên, solution để xử lý chúng được gọi là Circuit Breaker ! Tên gọi của annotation @ EnableCircuitBreaker bắt nguồn từ đó .

Circuit Breaker sẽ giúp tất cả chúng ta trả về giá trị mặc định nếu tất cả chúng ta không hề gọi tới service mà tất cả chúng ta cần, và nó cũng sẽ tự động hóa liên kết lại nếu service mà tất cả chúng ta cần available lại .
Việc tiếp theo mà tất cả chúng ta cần làm là khai báo thêm annotation @ HystrixCommand bên trên method mà tất cả chúng ta đang sử dụng để gọi tới service mà tất cả chúng ta cần như sau :

12345678910111213141516171819202122

packagecom.huongdanjava.springcloudhystrix;

importorg.springframework.web.bind.annotation.GetMapping;

importorg.springframework.web.bind.annotation.RestController;

importorg.springframework.web.client.RestTemplate;

importcom.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;

@ RestController

publicclassHystrixExampleController{

@ GetMapping[” / call-hello “]

@ HystrixCommand[fallbackMethod=” defaultCallHello “]

publicStringcallHello[]{

returnnewRestTemplate[].getForObject[” //localhost:8080/hello “,String.class];

}

publicStringdefaultCallHello[]{

return” Hello from Huong Dan Java ! ! ! “;

}

}

Như những bạn thấy annotation @ HystrixCommand có một attribute tên là fallbackMethod với giá trị là tên method sẽ trả về giá trị mặc định khi ứng dụng của tất cả chúng ta không hề connect tới service mà tất cả chúng ta cần .
Nếu giờ đây những bạn restart lại ứng dụng của tất cả chúng ta rồi request tới URL //localhost:8180/call-hello, những bạn sẽ thấy giá trị mặc định được trả về như sau :

Nếu giờ những bạn restart lại service “ Eureka Client Example ” rồi request lại URL //localhost:8180/call-hello, những bạn sẽ thấy dòng chữ “ Hello ! ! ! ” được trả về .
Rất hay phải không những bạn ?

Xem thêm: Pts là gì? Định nghĩa pts mà chúng ta hay bắt gặp

3/5 – [ 2 bầu chọn ]

Source: //chickgolden.com
Category: Hỏi đáp

Video liên quan

Chủ Đề