«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Модульная микросервисная архитектура Golang с рабочим пространством go

Модульная микросервисная архитектура Golang с рабочим пространством go

Опубликовано 8 ноября 2024 г.
Просматривать:347

Масштабируемая инфраструктура кодовой базы

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

В корне проекта создайте рабочее пространство go, просто используя простую команду go work init, в результате чего будет создан файл 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 использовать следующие службы: аутентификацию и пользователей.

Мы указываем корневой контекст, чтобы иметь доступ к файлам и папкам на корневом уровне.

Укажите расположение файла docker.

Определите заданный том для контейнера и в конце укажите порт, на котором будет работать контейнер.

Настройка докерфайлов

Настроить Dockerfile довольно просто и понятно.

Мы извлекаем последний образ golang alpine, назначаем рабочий каталог, перемещаем часть кода, настраиваем его для работы со структурой рабочего пространства 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 Workspace! ??

Исходный код: https://github.com/LegationPro/go-microservice-modular-docker-setup

Спасибо

Спасибо, что прочитали мой пост в блоге, надеюсь, это поможет ❤️!

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/legationpro/golang-microservice-modular-architecture-with-go-workspace-44db?1. В случае нарушения авторских прав свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3