Was ist Docker ComposeIn der heutigen Welt, in der Microservices weit verbreitet sind, definieren wir Compose normalerweise als Orchestrierungstool zum einheitlichen Starten und Herunterfahren von Containern. Aber ich habe noch eine Frage: Wer würde Compose verwenden, um mehrere Dienste auf einem einzigen Server bereitzustellen? Nutzen Sie nur einen einzigen Dienst! Bis ich auf die folgende Anforderung stieß, wurde mir klar, dass Compose, wenn ich mehrere Dienste auf einem Server verwenden musste, den Sidecar-Modus verwenden konnte, um es einem Dienst zu erleichtern, einen anderen Dienst über 127.0.0.1 aufzurufen Anforderungen stoßen auf unangemessene SpracheEin in Golang entwickeltes Projekt hofft, den Studentenstatus basierend auf den Studenteninformationen auszudrucken. Ein Teil der Studentenstatustabelle ist wie folgt Es ist nicht so, dass es in Go keine Bibliothek zum Bedienen von Wörtern gibt, aber es ist immer noch sehr schwierig, ein so komplexes Wort zu bedienen und die Informationen einzugeben. Also haben wir eine Lösung gefunden. Durchführung1. Definieren Sie eine gleiche Vorlage über Excel 2. Golang füllt den Wert in die angegebene Zelle von Excel, was viel einfacher ist, als den Wert in Word einzugeben. Ein Teil des Codes xlsx.SetCellValue("Tabelle1", "C3", Student.Hauptfach.Name) xlsx.SetCellValue("Tabelle1", "F3", student.ClassInfo.Name) xlsx.SetCellValue("Tabelle1", "J3", Schüler.Schulsystem) xlsx.SetCellValue("Tabelle1", "B4", student.Name) xlsx.SetCellValue("Tabelle1", "D4", student.BeforName) xlsx.SetCellValue("Tabelle1", "F4", Schüler.Geschlecht) xlsx.SetCellValue("Tabelle1", "H4", student.Nation) xlsx.SetCellValue("Tabelle1", "B5", student.AusweisNr) xlsx.SetCellValue("Tabelle1", "F5", student.HomePlace) xlsx.SetCellValue("Tabelle1", "B6", student.Geburtstag.Format("20060102")) xlsx.SetCellValue("Tabelle1", "D6", student.Eintrittszeit.Format("20060102")) xlsx.SetCellValue("Tabelle1", "F6", student.JoinTeamTime) xlsx.SetCellValue("Tabelle1", "B7", student.Familienadresse) xlsx.SetCellValue("Tabelle1", "F7", student.HealthStatus) 3. Der wichtigste Schritt ist die Konvertierung von Excel in PDF und die Rückgabe an das Frontend zur Anzeige oder zum Drucken Ich habe auf GitHub keine Golang-Bibliothek zum Konvertieren von Excel in PDF gefunden (bitte hinterlassen Sie eine Nachricht, wenn Sie Empfehlungen haben), also dachte ich an die FreeSpire.Xls-Bibliothek in .net, mit der sich die Funktion zum Konvertieren von Excel in PDF problemlos realisieren lässt. Ich brauche also eine .net-API, um das generierte und ausgefüllte Excel in PDF umzuwandeln. Also habe ich eine .net-WebAPI erstellt, den Projektnamen als PDF-Prozessor definiert und einen Controller definiert. [Route("[Controller]")] öffentliche Klasse PDFController: ControllerBase { privater schreibgeschützter ILogger<PDFController> _logger; öffentlicher PDFController (ILogger<PDFController>-Logger) { _logger = Logger; } [HttpPost] öffentliche asynchrone Task<IActionResult> HttpPostAsync() { versuchen { Stream stream = Anfrage.Body; byte[] Puffer = neues Byte[Anforderung.Inhaltslänge.Wert]; stream.Position = 0L; stream.ReadAsync(Puffer, 0, Puffer.Länge); Arbeitsmappe wb = neue Arbeitsmappe(); wb.LoadFromStream(Strom); Arbeitsblatt ws = wb.Arbeitsblätter[0]; var streamReturn = neuer MemoryStream(); ws.SaveToPdfStream(streamReturn); Datei zurückgeben (streamReturn, "Anwendung/Oktett-Stream"); } catch (Ausnahme ex) { _logger.LogError("", Beispiel); returniere BadRequest(zB Message); } } } 4. Stellen Sie das Go-Projekt und das .net-Projekt bereit, sodass die Go-Sprache die .net-API aufruft, um Excel in PDF zu konvertieren Da es sich um ein kleines Einzelprojekt handelt, muss ich überlegen, wie ich die Bereitstellung und den Aufruf relativ einfach gestalten kann. Zu diesem Zeitpunkt dachte ich an Docker Compose. Ich kann die Go-API und die .net-API gleichzeitig über Docker-Compose starten. Das Wichtigste ist, dass die Go- und .net-Projekte dasselbe Netzwerk verwenden können, sodass die Go-API die .net-API über Port 127.0.0.1 aufrufen kann. Die Topologie ist wie folgt 5. Die Go-API ruft die .net-API über 127.0.0.1 auf, sodass die .net-API zum Sidecar der Go-API wird und diese bedient Antwort, Fehler := http.Post("http://127.0.0.1:6081/PDF", "multipart/form-data;boundary="+multipart.NewWriter(bytes.NewBufferString("")).Boundary(), bytes.NewReader(byteA)) wenn err != nil { c.Schlecht(err.Fehler()) zurückkehren } Antwort verschieben.Body.Close() wenn Antwort.StatusCode != 200 { Daten, _ := ioutil.ReadAll(Antwort.Body) c.Bad(Zeichenfolge(Daten)) zurückkehren } pdfFilePth := fmt.Sprintf("./templates/tmp/%s.pdf", uuid.New()) f, err := os.Create(pdfFilePth) wenn err != nil { c.Schlecht(err.Fehler()) zurückkehren } io.Kopie(f, Antwort.Text) c.Ctx.Output.Download(pdfFilePth, "data.xlsx") 6. Docker-Compose-Bereitstellung Schreiben einer Docker-Datei für Go VON Bibliothek/Golang ARBEITSVERZEICHNIS /app RUN go env -w GO111MODULE=on RUN go env -w GOPROXY=https://goproxy.cn,direct ADD api/ /app Führen Sie den Befehl cd /app aus. RUN gehen mod ordentlich FÜHREN Sie go build main.go aus EINSTIEGSPUNKT ["/app/main"] EXPOSE 6080 .net Dockerfile schreiben #Unter https://aka.ms/containerfastmode erfahren Sie, wie Visual Studio diese Docker-Datei verwendet, um Ihre Bilder für ein schnelleres Debuggen zu erstellen. VON mcr.microsoft.com/dotnet/aspnet:6.0 AS-Basis Führen Sie apt-get update aus. Führen Sie apt-get install -y --no-install-recommends libgdiplus libc6-dev aus. Führen Sie den Befehl apt-get install -y fontconfig xfonts-utils aus. KOPIEREN /pdfprocessor/fonts/ /usr/share/fonts/ Führen Sie mkfontscale aus Führen Sie mkfontdir aus Führen Sie den Befehl fc-cache -fv aus. ARBEITSVERZEICHNIS /app EXPOSE 6081 VON mcr.microsoft.com/dotnet/sdk:6.0 AS-Build ARBEITSVERZEICHNIS /src KOPIEREN ["pdfprocessor/pdfprocessor.csproj", "pdfprocessor/"] Führen Sie dotnet restore "pdfprocessor/pdfprocessor.csproj" aus. KOPIEREN . . Arbeitsverzeichnis "/src/pdfprocessor" Führen Sie den Befehl dotnet build "pdfprocessor.csproj" -c Release -o /app/build aus. VON Erstellen ALS Veröffentlichen RUN dotnet publish "pdfprocessor.csproj" -c Release -o /app/publish VON Basis ALS Finale ARBEITSVERZEICHNIS /app KOPIEREN --from=publish /app/publish . EINSTIEGSPUNKT ["dotnet", "pdfprocessor.dll"] Schreiben Sie docker-compose.yaml, damit goapi und .net api dasselbe Netzwerk verwenden können Version: '3.4' Leistungen: PDF-Prozessor: Bild: pdfprocessor bauen: Kontext: . Dockerdatei: pdfprocessor/Dockerfile hängt ab von: - Bildungsadministrator Netzwerkmodus: "Dienst:eduadmin" eduadmin: Bild: eduadmin bauen: Kontext: . Docker-Datei: API/Docker-Datei Häfen: - „6080:6080“ - „6088:6088“ 7. Starten Sie den Dienst über Docker-Compose Up -d und sehen Sie sich den PDF-Anzeigeeffekt an Abschließend möchte ich sagen, dass Docker-Compose wirklich großartig ist! Dies ist das Ende dieses Artikels über den Sidecar-Modus von Docker Compose. Weitere Informationen zum Sidecar-Modus von Docker Compose finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Details zum Like-Operator in MySQL
In horizontaler Richtung können Sie die Zeilenaus...
Überblick Das Builder-Muster ist ein relativ einf...
Inhaltsverzeichnis 1. Der Unterschied zwischen me...
Inhaltsverzeichnis Was ist ein Slot Grundlegendes...
In diesem Artikel wird der spezifische JavaScript...
Inhaltsverzeichnis 1. Ist setState synchron? asyn...
Wenn Sie eine E-Mail in einem Shell-Skript erstel...
Beschreibung der Situation: Heute habe ich mich b...
Normalerweise besteht das Ziel beim Erstellen ein...
Inhaltsverzeichnis Vorwort 1. Ursache des Problem...
Heute habe ich einem Kunden ein kleines Tool für ...
Ohne weitere Umschweife sind dies diese drei Meth...
In diesem Artikel wird der spezifische Code von V...
Während des Crawler-Entwicklungsprozesses sind Si...
In diesem Artikel wird der spezifische Code von V...