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.
Việc quản lý và monitor các service trong một hệ thống Microservices là một việc rất quan trọng, nhằm đảm bảo ứng dụng của chúng ta có thể hoạt động một cách trơn tru. Để làm được việc này, trước hết chúng ta cần một nơi có thể dùng để đăng ký thông tin của các service và quản lý chúng. Đối với các service trong ứng dụng Questions Management, mình sẽ sử dụng Spring Cloud Netflix với Eureka Server để làm việc này. Trong bài viết này, mình sẽ điểm qua một số bước quan trọng trong quá trình tạo Spring Boot project support-discovery-server cho mục đích trên các bạn nhé!
Ở cửa sổ New Spring Starter Project, sau khi điền thông tin về project của chúng ta, phần Location các bạn cần trỏ đến thư mục của project questions-management:
Như các bạn thấy, trong thư mục của project questions-management, mình đã thêm một thư mục support bên trong thư mục này để chứa tất cả các project liên quan đến việc hỗ trợ quản lý và monitor các service trong ứng dụng Questions Management của chúng ta.
Ở phần chọn dependencies sử dụng cho project support-discovery-server, chúng ta chỉ cần duy nhất một dependency đó là Eureka Server của Spring Cloud Netflix như sau:
Các bạn có thể đọc thêm bài viết về Eureka Server tại đây để hiểu rõ hơn.
Kết quả:
Tiếp theo, mình sẽ chỉnh sửa lại project này để nó sử dụng parent project của project questions-management.
Đầu tiên, các bạn hãy xem nội dung của tập tin pom.xml trong project mà chúng ta vừa tạo:
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 55 56 57 58 59 60 61 62 63 64 65 66 |
<?xml version="1.0" encoding="UTF-8"?> <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> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.1.RELEASE</version> <relativePath /> <!-- lookup parent from repository --> </parent> <groupId>com.huongdanjava.qm</groupId> <artifactId>support-discovery-server</artifactId> <version>0.0.1-SNAPSHOT</version> <name>support-discovery-server</name> <description>Support Discovery Server for Questions Management</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>Greenwich.RC1</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <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> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> </repository> </repositories> </project> |
Mình sẽ move phần <dependencyManagement> và phần <spring-cloud.version> sang tập tin pom.xml của project questions-management để sử dụng cho tất cả các project có sử dụng Spring Cloud trong tương lai, rồi xoá phần <parent>, phần <properties>, phần <repositories> để khai báo sử dụng parent project của project questions-management như sau:
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 |
<?xml version="1.0" encoding="UTF-8"?> <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> <artifactId>support-discovery-server</artifactId> <name>support-discovery-server</name> <description>Support Discovery Server for Questions Management</description> <parent> <groupId>com.huongdanjava.qm</groupId> <artifactId>questions-management</artifactId> <version>0.0.1-SNAPSHOT</version> <relativePath>../../pom.xml</relativePath> </parent> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> |
Lúc này, các bạn sẽ thấy tập tin pom.xml này báo lỗi liên quan đến việc không tìm thấy dependency cho Spring Cloud:
Nguyên nhân là vì mình đã remove phần <repositories> trong tập tin pom.xml này.
Lý do mà mình remove phần <repositories> đi vì mình muốn define tất cả repositories cần dùng cho project questions-management trong tập tin settings.xml trong thư mục “<user.home>/.m2/” của Apache Maven. Việc này rất có ích cho việc triển khai ứng dụng Questions Management trong tương lai đó các bạn!
Nếu các bạn không biết định nghĩa tập tin settings.xml như thế nào thì có thể tham khảo của mình, như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<settings> <profiles> <profile> <id>nexus</id> <activation> <activeByDefault>true</activeByDefault> </activation> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> </repository> </repositories> </profile> </profiles> </settings> |
Cuối cùng, mình sẽ khai báo project support-discovery-server là một module của project questions-management như sau:
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 |
<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.qm</groupId> <artifactId>questions-management</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <name>Questions Management</name> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.1.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.RC1</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> </modules> </project> |