0
0
Lập trình
Thaycacac
Thaycacac thaycacac

Hướng Dẫn Xây Dựng Dự Án Microservices với Spring Boot: Tích Hợp Eureka Server và Config Server

Đăng vào 1 tuần trước

• 4 phút đọc

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 Copy
<?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 Copy
<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 Copy
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 Copy
@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 Copy
<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 Copy
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 Copy
@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

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào