Rumah >pembangunan bahagian belakang >Golang >Cipta sistem teragih menggunakan rangka kerja perkhidmatan mikro Golang

Cipta sistem teragih menggunakan rangka kerja perkhidmatan mikro Golang

王林
王林asal
2024-06-05 18:36:001198semak imbas

Buat sistem teragih menggunakan rangka kerja mikroperkhidmatan Golang: Pasang Golang, pilih rangka kerja mikroperkhidmatan (seperti Gin) untuk mencipta perkhidmatan mikro Gin, tambah titik akhir untuk menggunakan perkhidmatan mikro, bina dan jalankan aplikasi untuk membuat pesanan dan inventori perkhidmatan mikro, gunakan titik akhir untuk memproses pesanan dan Inventori Gunakan sistem pemesejan seperti Kafka untuk menyambungkan perkhidmatan mikro Gunakan perpustakaan sarama untuk menghasilkan dan menggunakan maklumat pesanan

使用 Golang 微服务框架创建分布式系统

Buat sistem teragih menggunakan rangka kerja mikroperkhidmatan Golang

Dalam artikel ini, kami akan membimbing anda langkah demi langkah untuk membuat pengedaran menggunakan sistem formula rangka kerja mikro Golang. Kami juga akan menyediakan contoh praktikal yang menunjukkan cara mencipta aplikasi dunia sebenar menggunakan corak perkhidmatan mikro.

Prasyarat

  • Golang dipasang dan dikonfigurasikan pada sistem anda
  • Pengetahuan Asas Golang

Pengenalan kepada Microservices

Seni bina perkhidmatan mikro ialah pendekatan reka bentuk perisian yang membahagikan aplikasi kepada modul bebas. Setiap perkhidmatan mikro mengendalikan fungsi tertentu dan boleh digunakan, diskalakan dan diselenggara secara bebas.

Rangka Kerja Perkhidmatan Mikro Golang

Terdapat banyak rangka kerja perkhidmatan mikro yang tersedia untuk Golang, antara yang paling popular termasuk:

  • Gin: rangka kerja web yang ringkas dan cekap
  • berprestasi tinggi dan mudah gema -gunakan rangka kerja Web yang digunakan
  • Fiber: Rangka kerja web yang pantas dan ringan
Dalam panduan ini, kami akan menggunakan rangka kerja Gin untuk menunjukkan proses penciptaan perkhidmatan mikro.

Buat perkhidmatan mikro Gin

Mula-mula, buat modul Go baharu:

go mod init microservice

Seterusnya, pasang rangka kerja Gin:

go get github.com/gin-gonic/gin

Buat penghala Gin baharu:

package main

import (
    "github.com/gin-gonic/gin"
)

func main() {
    r := gin.Default()
}

Untuk tambah titik tamat

, sila tambah pada titik akhir

gunakan Gin.RouterGroup Objek:

func main() {
    r := gin.Default()
    r.GET("/hello", func(c *gin.Context) {
        c.JSON(200, gin.H{"message": "Hello, World!"})
    })
}
Gin.RouterGroup 对象:

go build .
./microservice

部署微服务

要部署微服务,请构建并运行应用程序:

func main() {
    r := gin.Default()
    r.GET("/orders", func(c *gin.Context) {
        // 获取所有订单
    })
    r.POST("/orders", func(c *gin.Context) {
        // 创建新订单
    })
}

实战案例:订单管理系统

让我们创建一个订单管理系统,其中包含一个处理用户订单的微服务。

创建订单微服务

使用相同的步骤创建一个新的 Gin 微服务,并添加以下端点:

func main() {
    r := gin.Default()
    r.GET("/stock/:product_id", func(c *gin.Context) {
        // 获取产品的库存数量
    })
}

创建库存微服务

库存微服务将跟踪产品可用性。使用相同的步骤创建一个新的 Gin 微服务,并添加以下端点:

import (
    "context"
    "time"

    "github.com/Shopify/sarama"
)

func main() {
    producer, err := sarama.NewSyncProducer([]string{"localhost:9092"}, nil)
    if err != nil {
        // 处理错误
    }
    msg := &sarama.ProducerMessage{
        Topic: "orders",
        Value: sarama.StringEncoder("new order"),
    }
    _, _, err = producer.SendMessage(msg)
    if err != nil {
        // 处理错误
    }
}

连接微服务

为了让微服务相互通信,我们需要使用一个消息传递系统。在本例中,我们将使用 Kafka。

  • 安装 Kafka:brew install kafka
  • 创建一个 Kafka 主题:kafka-topics --create --topic orders
  • 在订单微服务中,使用 sarama 库生产订单:
import (
    "context"
    "log"
    "time"

    "github.com/Shopify/sarama"
)

func main() {
    consumer, err := sarama.NewConsumer([]string{"localhost:9092"}, nil)
    if err != nil {
        // 处理错误
    }
    defer consumer.Close()
    ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
    consumer.ConsumePartition("orders", 0, sarama.OffsetNewest)
    for {
        select {
        case msg := <-consumer.Messages():
            log.Printf("Received message: %s\n", string(msg.Value))
        case err := <-consumer.Errors():
            log.Printf("Received consumer error: %s\n", err.Error())
        case <-ctx.Done():
            cancel()
            return
        }
    }
}
  • 在库存微服务中,使用 sarama Menggunakan perkhidmatan mikro
Untuk menggunakan perkhidmatan mikro, bina dan jalankan aplikasi:

rrreee

Kes praktikal: Sistem pengurusan pesanan

Mari kita buat Sistem pengurusan pesanan yang mengandungi perkhidmatan mikro yang mengendalikan pesanan pengguna. 🎜🎜🎜Buat Pesanan Mikroperkhidmatan🎜🎜🎜Gunakan langkah yang sama untuk mencipta perkhidmatan mikro Gin baharu dan tambah titik akhir berikut: 🎜rrreee🎜🎜Buat Perkhidmatan Mikro Inventori 🎜🎜🎜Perkhidmatan mikro inventori akan menjejaki ketersediaan produk. Cipta perkhidmatan mikro Gin baharu menggunakan langkah yang sama dan tambahkan titik akhir berikut: 🎜rrreee🎜🎜Menghubungkan Perkhidmatan Mikro🎜🎜🎜Untuk membolehkan perkhidmatan mikro berkomunikasi antara satu sama lain, kita perlu menggunakan sistem pemesejan. Dalam contoh ini, kita akan menggunakan Kafka. 🎜🎜🎜Pasang Kafka: bancuh pasang kafka🎜🎜Buat topik Kafka: topik-kafka --buat --perintah topik🎜🎜Dalam perkhidmatan mikro pesanan, gunakan sarama pesanan pengeluaran perpustakaan: 🎜🎜rrreee🎜🎜Dalam mikroperkhidmatan inventori, gunakan sarama pesanan penggunaan perpustakaan: 🎜🎜rrreee🎜Ringkasan🎜🎜Menggunakan rangka kerja mikroperkhidmatan Golang, anda boleh Cipta diedarkan sistem dengan mudah. Dengan mengikuti langkah dalam artikel ini, anda akan dapat membina sistem pengurusan pesanan yang menggunakan pemesejan untuk menyelaraskan perkhidmatan mikro. 🎜

Atas ialah kandungan terperinci Cipta sistem teragih menggunakan rangka kerja perkhidmatan mikro Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn