Heim > Backend-Entwicklung > Golang > Modulare Golang-Microservice-Architektur mit Go-Workspace

Modulare Golang-Microservice-Architektur mit Go-Workspace

DDD
Freigeben: 2024-10-01 18:08:02
Original
730 Leute haben es durchsucht

Skalierbare Codebasis-Infrastruktur

Golang glänzt in der Backend-Entwicklung und im gleichzeitigen Betrieb und ist eine perfekte Suite für die Erstellung skalierbarer und leistungsstarker Backend-Anwendungen. Aufgrund des Mangels an Beiträgen, die sich mit der Microservice-Architektur mit Go-Workspaces befassen, die ein unglaubliches Tool zum Teilen von modularem Code über verschiedene Dienste darstellt, habe ich beschlossen, meine Implementierung zu teilen.

Projektaufbau

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
Nach dem Login kopieren

Die folgenden Shell-Befehle erzeugen die folgende Ordnerbaumstruktur

Golang microservice modular architecture with go workspace

Go-Workspace einrichten

Erstellen Sie im Stammverzeichnis des Projekts einen Go-Arbeitsbereich, indem Sie einfach den einfachen Befehl go work init verwenden. Dadurch wird die Datei go.work erstellt

Als nächstes initialisieren Sie alle verschiedenen Go-Projekte, die Abhängigkeiten enthalten und Codebasen ausführen können.

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
Nach dem Login kopieren

Nachdem Sie die folgenden Befehle ausgeführt haben, sollte Ihr Projekt so aussehen

Golang microservice modular architecture with go workspace

Als nächstes füllen wir den Go-Arbeitsbereich und teilen ihm mit, was Teil des Arbeitsbereichs ist, indem wir den folgenden Befehl ausführen

Gehen Sie zur Arbeit und verwenden Sie ./services/authentication ./services/users ./shared

Dadurch wird die go.work-Datei gefüllt

go 1.23.1

use (
    ./services/authentication
    ./services/users
    ./shared
)
Nach dem Login kopieren

Einrichten mit Docker

Lass uns zuerst die docker-compose.yml durchgehen.

Ihre docker-compose.yml-Datei sollte so aussehen

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"
Nach dem Login kopieren

Wir weisen Docker-Compose an, die folgenden Dienste zu verwenden: Authentifizierung und Benutzer.

Wir geben den Root-Kontext an, damit wir auf der Root-Ebene auf die Dateien und Ordner zugreifen können.

Geben Sie den Speicherort der Docker-Datei an.

Definieren Sie das angegebene Volumen für den Container und geben Sie am Ende einen Port frei, auf dem der Container ausgeführt werden soll.

Dockerfiles einrichten

Das Einrichten der Docker-Datei ist ziemlich einfach und unkompliziert.

Wir rufen das neueste Golang-Alpen-Image ab, weisen ein Arbeitsverzeichnis zu, verschieben einen Teil des Codes, passen ihn an die Go-Workspace-Struktur an und führen ihn einfach aus.

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"]
Nach dem Login kopieren

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"]
Nach dem Login kopieren

Schreiben unseres Servicecodes

services/authentication/main.go

package main

import (
    "fmt"

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

func main() {
    fmt.Println(utils.SomeAuthFunc())
}
Nach dem Login kopieren

services/users/main.go

package main

import (
    "fmt"

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

func main() {
    fmt.Println(utils.SomeUserFunc())
}
Nach dem Login kopieren

shared/utils/utils.go

package utils

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

func SomeUserFunc() string {
    return "Some user func"
}
Nach dem Login kopieren

Die Struktur sollte jetzt so aussehen

Golang microservice modular architecture with go workspace

Führen Sie die Anwendung in einem Docker-Container aus

docker-compose up --build

Um sicherzustellen, dass alles funktioniert, sollte die Ausgabe wie folgt aussehen:

Golang microservice modular architecture with go workspace

Das ist alles, Sie haben ein voll funktionsfähiges Go-Workspace-Setup mit modularer Microservice-Architektur! ??

Quellcode: https://github.com/LegationPro/go-microservice-modular-docker-setup

Danke

Vielen Dank für das Lesen meines Blogbeitrags, ich hoffe, das hilft ❤️!

Das obige ist der detaillierte Inhalt vonModulare Golang-Microservice-Architektur mit Go-Workspace. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage