Hướng Dẫn Xây Dựng Dự Án Microservices với Spring Boot
Giới Thiệu
Trong bài viết này, chúng ta sẽ cùng nhau khám phá cách xây dựng một dự án microservices sử dụng Spring Boot với sự hỗ trợ của Eureka Server và Config Server. Bài viết được viết bởi một người mới học về microservices, mong rằng các bạn sẽ không ngần ngại chỉ ra những sai sót nếu có. Mọi đóng góp để cải thiện bài viết luôn được hoan nghênh! 😇
Kiến Trúc Hệ Thống
Đề tài mà chúng ta sẽ triển khai có kiến trúc tương tự như dự án mẫu Microservices with Spring Cloud Advanced Demo Project. Dự án này được xây dựng dựa trên việc tham khảo từ các dự án và bài viết khác nhau.
Cấu Trúc Dự Án
Tạo Thư Mục Dự Án
Bắt đầu bằng cách tạo một thư mục có tên là Sample Microservices-Eureka
. Sau đó, mở thư mục này bằng IntelliJ IDEA và tạo file pom.xml
với nội dung như sau:
xml
<?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 https://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>3.4.1</version>
<relativePath/>
</parent>
<groupId>oniamey.nghiabe.services</groupId>
<artifactId>sample-microservices-eureka</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<properties>
<java.version>21</java.version>
<spring-cloud.version>2024.0.0</spring-cloud.version>
<sonar.projectKey>nghiabeoniamey_microservices-eureka</sonar.projectKey>
<sonar.organization>nghiabeoniamey</sonar.organization>
<sonar.host.url>https://sonarcloud.io</sonar.host.url>
</properties>
<modules>
<!-- <module>eureka-server</module>-->
<!-- <module>config-server</module>-->
<!-- <module>common-service</module>-->
<!-- <module>auth-service</module>-->
<!-- <module>gateway-service</module>-->
</modules>
<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>
<plugin>
<groupId>org.cyclonedx</groupId>
<artifactId>cyclonedx-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Tạo Module Config Server
Tiếp theo, bạn sẽ tạo một module Spring Boot tên là Config Server với các dependencies sau:
- spring-cloud-config-server
- spring-cloud-starter-bootstrap
- spring-dotenv (để thêm biến môi trường khi build)
Dependencies trong pom.xml
:
xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<dependency>
<groupId>me.paulschwarz</groupId>
<artifactId>spring-dotenv</artifactId>
<version>4.0.0</version>
</dependency>
Cấu Hình application.yml
cho Config Server
Tạo file application.yml
cho Config Server với nội dung như sau:
yaml
server:
port: 8088
spring:
profiles:
active: native
cloud:
config:
native:
search-locations: classpath:/config
encrypt:
enabled: false
logging:
level:
root: info
Cấu Hình ServerApplication
Tạo class ConfigServerApplication
và thêm annotation @EnableConfigServer
như sau:
java
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
Tạo Module Eureka Server
Bây giờ, bạn có thể tạo một module Spring Boot tên là Eureka Server hoặc Discovery Service với các dependencies cần thiết:
- spring-cloud-starter-netflix-eureka-server
- spring-cloud-starter-config
- spring-boot-starter-web
Dependencies trong pom.xml
:
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
Cấu Hình application.yml
cho Eureka Server
Đừng quên thiết lập application.yml
cho Eureka Server:
yaml
spring:
application:
name: eureka-server
config:
import: "optional:configserver:http://localhost:8088"
Cấu Hình ServerApplication cho Eureka Server
Cuối cùng, tạo class EurekaServerApplication
và thêm annotation @EnableEurekaServer
như sau:
java
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
Chạy Dự Án
Bây giờ bạn đã hoàn thành việc cấu hình cho cả Config Server và Eureka Server. Hãy đảm bảo rằng bạn khởi động config-server
trước khi eureka-server
để đảm bảo tất cả các cấu hình được nạp đúng. Nếu mọi thứ hoạt động trơn tru, bạn sẽ thấy Eureka Server nhận được cấu hình từ Config Server thành công.
Hẹn gặp lại các bạn trong bài viết tiếp theo về microservices với Spring Boot!
source: viblo