>  기사  >  백엔드 개발  >  Go 작업 공간을 갖춘 Golang 마이크로서비스 모듈식 아키텍처

Go 작업 공간을 갖춘 Golang 마이크로서비스 모듈식 아키텍처

DDD
DDD원래의
2024-10-01 18:08:02706검색

확장 가능한 코드베이스 인프라

Golang은 백엔드 개발, 동시 작업에서 빛을 발하며 확장 가능하고 성능이 뛰어난 백엔드 애플리케이션을 구축하는 데 완벽한 제품군입니다. 다양한 서비스를 통해 모듈식 코드를 공유할 수 있는 놀라운 도구인 Go 작업 공간을 갖춘 마이크로서비스 아키텍처에 관한 게시물이 부족하여 구현 내용을 공유하기로 결정했습니다.

프로젝트 설정

Golang microservice modular architecture with go workspace

mkdir docker

touch docker/Dockerfile.authentication

touch docker/Dockerfile.users

mkdir -p services/authentication

mkdir -p services/users

mkdir -p shared/utils

touch docker-compose.yml

다음 셸 명령을 사용하면 다음과 같은 폴더 트리 구조가 생성됩니다

Golang microservice modular architecture with go workspace

이동 작업공간 설정

프로젝트 루트에서 간단한 명령 go work init를 사용하여 go 작업 공간을 생성하면 go.work 파일이 생성됩니다

다음으로, 종속성을 보유하고 코드베이스를 실행할 수 있는 다양한 Go 프로젝트를 모두 초기화하세요.

cd services/authentication && go mod init github.com/LegationPro/ms/services/authentication

cd ../.. && cd services/users && go mod init github.com/LegationPro/ms/services/users

cd ../.. && cd shared && go mod init github.com/LegationPro/ms/shared

다음 명령을 실행한 후 프로젝트는 다음과 같아야 합니다

Golang microservice modular architecture with go workspace

다음으로, 다음 명령을 실행하여 go 작업 공간을 채우고 작업 공간의 일부를 알려줍니다

출근하려면 ./services/authentication ./services/users ./shared를 사용하세요

이렇게 하면 go.work 파일이 채워집니다

go 1.23.1

use (
    ./services/authentication
    ./services/users
    ./shared
)

Docker로 설정하기

먼저 docker-compose.yml을 살펴보겠습니다.

docker-compose.yml 파일은 다음과 같습니다

services:
  authentication:
    build:
      context: .
      dockerfile: docker/Dockerfile.authentication
    volumes:
      - ./services/authentication:/app/authentication
      - ./shared:/app/shared
    ports:
      - "8081:8081"

  users:
    build:
      context: .
      dockerfile: docker/Dockerfile.users
    volumes:
      - ./services/users:/app/users
      - ./shared:/app/shared
    ports:
      - "8082:8082"

docker-compose에게 인증과 사용자라는 다음 서비스를 사용하라고 지시합니다.

루트 컨텍스트를 제공하므로 루트 수준에서 파일과 폴더에 액세스할 수 있습니다.

dockerfile 위치를 제공하세요.

컨테이너에 대해 지정된 볼륨을 정의하고 마지막에 컨테이너가 실행될 포트를 노출합니다.

Dockerfile 설정

Dockerfile 설정은 매우 간단하고 간단합니다.

최신 golang 알파인 이미지를 가져와 작업 디렉터리를 할당하고 일부 코드를 이동한 다음 go 작업 공간 구조와 작동하도록 조정하고 간단히 실행합니다.

docker/Dockerfile.authentication

# Pull golang image
FROM golang:1.23-alpine

# Switch to /app as the working directory
WORKDIR /app

# Copy the authentication codebase over to our container
COPY ./services/authentication /app/authentication/

# Copy the shared codebase and libraries that are shared across our apps inside the container
COPY ./shared /app/shared

# Initialize go workspace inside of our container
RUN go work init

# Assign different codebases to go workspaces
RUN go work use ./authentication ./shared

# Simply run our service with this simple command
CMD ["go", "run", "./authentication"]

Dockerfile.users

# Pull golang image
FROM golang:1.23-alpine

# Switch to /app as the working directory
WORKDIR /app

# Copy the authentication codebase over to our container
COPY ./services/users /app/users/

# Copy the shared codebase and libraries that are shared across our apps inside the container
COPY ./shared /app/shared

# Initialize go workspace inside of our container
RUN go work init

# Assign different codebases to go workspaces
RUN go work use ./users ./shared

# Simply run our service with this simple command
CMD ["go", "run", "./users"]

서비스 코드 작성

서비스/인증/main.go

package main

import (
    "fmt"

    "github.com/LegationPro/ms/shared/utils"
)

func main() {
    fmt.Println(utils.SomeAuthFunc())
}

서비스/사용자/main.go

package main

import (
    "fmt"

    "github.com/LegationPro/ms/shared/utils"
)

func main() {
    fmt.Println(utils.SomeUserFunc())
}

shared/utils/utils.go

package utils

func SomeAuthFunc() string {
    return "Some auth func"
}

func SomeUserFunc() string {
    return "Some user func"
}

이제 구조는 이렇게 생겼을 겁니다

Golang microservice modular architecture with go workspace

Docker 컨테이너 내에서 애플리케이션 실행

docker-compose up --build

모든 것이 제대로 작동하는지 확인하려면 출력이 다음과 같아야 합니다.

Golang microservice modular architecture with go workspace

이제 모든 기능을 갖춘 Go 작업 공간 모듈식 마이크로서비스 아키텍처 설정이 완료되었습니다! ??

소스코드 : https://github.com/LegationPro/go-microservice-modular-docker-setup

감사합니다

제 블로그 게시물을 읽어주셔서 감사합니다. 도움이 되었기를 바랍니다 ❤️!

위 내용은 Go 작업 공간을 갖춘 Golang 마이크로서비스 모듈식 아키텍처의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.