Xem toàn bộ series bài viết hướng dẫn xây dựng ứng dụng Questions Management tại đây.
Mình đã hướng dẫn các bạn về Turbine Stream với RabbitMQ trong bài viết này, để hiện thực nó cho ứng dụng Questions Management, đầu tiên chúng ta cần thêm Hystrix Stream và Stream Rabbit dependency cho các API và Composite service như sau:
1 2 3 4 5 6 7 8 |
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-netflix-hystrix-stream</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-stream-rabbit</artifactId> </dependency> |
Tiếp theo thì chúng ta cần khai báo thông tin về RabbitMQ cho các service này trong tập tin application.properties của chúng:
1 2 3 4 |
spring.rabbitmq.host=localhost spring.rabbitmq.port=5672 spring.rabbitmq.username=guest spring.rabbitmq.password=guest |
Trong project support-turbine-stream, các bạn cần thêm annotation @EnableTurbineStream cho class SupportTurbineStreamApplication:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
package com.huongdanjava.qm.turbinestream; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.turbine.stream.EnableTurbineStream; @SpringBootApplication @EnableTurbineStream public class SupportTurbineStreamApplication { public static void main(String[] args) { SpringApplication.run(SupportTurbineStreamApplication.class, args); } } |
và cấu hình tập tin application.properties như sau:
1 2 3 4 5 6 7 8 9 10 |
spring.application.name=Support Turbine Stream server.port=8580 spring.rabbitmq.host=localhost spring.rabbitmq.port=5672 spring.rabbitmq.username=guest spring.rabbitmq.password=guest eureka.client.register-with-eureka=false eureka.client.fetch-registry=false |
Điều cuối cùng chúng ta cần làm đó là, bởi vì latest version của Spring Cloud Netflix không work với Hystrix Stream và Turbine Stream nên chúng ta cần dowgrade version của nó xuống Greenwich.M1 trong tập tin pom.xml của parent project questions-management:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.huongdanjava</groupId> <artifactId>questions-management</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <name>Questions Management System</name> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <spring-cloud.version>Greenwich.M1</spring-cloud.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <modules> <module>core/core-category-service</module> <module>core/core-option-service</module> <module>core/core-question-service</module> <module>composite/composite-question-service</module> <module>composite/composite-option-service</module> <module>api/api-category-service</module> <module>api/api-question-service</module> <module>api/api-option-service</module> <module>support/support-discovery-server</module> <module>support/support-edge-server</module> <module>support/support-monitor-dashboard</module> <module>support/support-turbine-stream</module> </modules> </project> |
Xong rồi đó các bạn, giờ các bạn hãy thử start MongoDB, RabbitMQ, toàn bộ các service và support:
Start front-end:
Chạy Support Hystrix Dashboard connect tới Support Turbine Stream:
Đi đến trang hiển thị tất cả các câu hỏi, rồi trang hiển thị tất cả các category nhiều lần, sau đó quay lại màn hình của Hystrix Dashboard, các bạn sẽ thấy kết quả như sau:
Nếu bây giờ mình tắt Core Option Service đi rồi làm lại các thao tác trên, các bạn sẽ thấy kết quả như sau:
Như các bạn thấy phần hiển thị trên Hystrix Dashboard, phần gọi tới để lấy tất cả các option đang bị lỗi. Dựa vào report này, chúng ta sẽ biết service nào đang cần take action gấp để hệ thống của chúng ta hoạt động ổn định trở lại.