Rumah >pembangunan bahagian belakang >Golang >Gunakan rangka kerja Gin untuk melaksanakan fungsi baris gilir tugas dan baris gilir mesej

Gunakan rangka kerja Gin untuk melaksanakan fungsi baris gilir tugas dan baris gilir mesej

PHPz
PHPzasal
2023-06-22 12:58:402331semak imbas

Gin ialah rangka kerja web berdasarkan bahasa Go dan digunakan secara meluas dalam bidang pembangunan web. Walau bagaimanapun, sebagai tambahan kepada pembangunan web, rangka kerja Gin juga boleh digunakan untuk melaksanakan fungsi lain, seperti baris gilir tugas dan baris gilir mesej.

Baris gilir tugas dan baris gilir mesej ialah komponen biasa dalam sistem teragih moden untuk pemprosesan tak segerak bagi data dan mesej. Barisan gilir ini boleh digunakan dalam senario seperti pencukuran puncak dan pengisian lembah, pemprosesan tak segerak bagi sejumlah besar data, dsb. Barisan tugasan memberi lebih perhatian kepada aliran kerja dan melaksanakan setiap tugas dalam urutan proses tertentu manakala baris gilir mesej membayar lebih perhatian kepada komunikasi tak segerak dan menghantar mesej ke baris gilir , diproses secara tak segerak oleh pengguna.

Artikel ini akan memperkenalkan cara menggunakan rangka kerja Gin untuk melaksanakan kedua-dua fungsi baris gilir ini. Kami akan menggunakan contoh untuk menunjukkan cara menggunakan rangka kerja Gin untuk melaksanakan fungsi baris gilir tugas dan baris gilir mesej, sambil menyediakan kod lengkap.

1. Baris Tugasan

Baris gilir tugas ialah baris gilir yang boleh memproses tugasan mengikut aliran kerja tertentu Anda tidak perlu memberi perhatian kepada susunan pelaksanaan tugas, cuma tambahkan tugasan barisan tugasan Boleh.

Dalam baris gilir tugasan, aliran pemprosesan tugasan ditetapkan Setiap tugasan perlu melalui langkah berikut:

  1. Terima tugasan: Tambahkan tugasan untuk dilaksanakan pada tugasan. beratur .
  2. Dapatkan semula tugasan: Dapatkan semula tugasan untuk dilaksanakan daripada baris gilir tugas mengikut turutan.
  3. Memproses tugas: Memproses tugas yang diambil.
  4. Tugas lengkap: Selepas pemprosesan tugas selesai, alih keluar tugasan daripada baris gilir tugas.

Oleh itu, apabila melaksanakan baris gilir tugas, anda perlu mengikuti proses di atas untuk menambah, mengalih keluar dan mengalih keluar tugas. Pemprosesan tugas memerlukan pemprosesan tak segerak menggunakan kaedah seperti coroutine.

Kami menggunakan rangka kerja Gin untuk melaksanakan baris gilir tugasan yang paling mudah Kodnya adalah seperti berikut:

package main

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

// 任务队列
var taskQueue = make(chan int)

// 任务处理
func processTask() {
    for taskId := range taskQueue {
        // 处理任务
        println("Processing task: ", taskId)
    }
}

func main() {
    // 初始化任务处理协程
    go processTask()

    // 设置路由
    router := gin.Default()
    router.POST("/tasks", func(c *gin.Context) {
        // 读取任务ID
        taskId, exists := c.GetPostForm("task_id")
        if !exists {
            c.JSON(400, gin.H{"msg": "task_id is required"})
            return
        }

        // 将任务加入到任务队列
        taskQueue <- taskId

        c.JSON(200, gin.H{"msg": "task added"})
    })

    // 启动服务
    router.Run(":8080")
}

Dalam kod di atas, kami menggunakan saluran untuk menyimpan tugasan dan memproses tugasan secara tidak segerak melalui coroutine. Apabila aplikasi bermula, kami mencipta coroutine untuk mengendalikan tugas. Untuk setiap tugasan yang ditambahkan dalam permintaan, kami menghantarnya ke saluran baris gilir tugas, dan kemudian coroutine menerima permintaan daripada saluran dan memproses tugasan.

2. Baris Gilir Mesej

Tidak seperti baris gilir tugas, baris gilir mesej memberi lebih perhatian kepada komunikasi tak segerak dan sering digunakan bersama dengan sistem teragih. Proses asasnya adalah seperti berikut:

  1. Hantar mesej: Tambahkan mesej pada baris gilir.
  2. Menggunakan mesej: Seorang atau lebih pengguna mengambil mesej daripada baris gilir untuk diproses.
  3. Sahkan mesej: Pengguna mengesahkan bahawa mesej telah diproses dan memadamkan mesej daripada baris gilir.

Dalam penggunaan sebenar, terdapat banyak cara yang berbeza untuk melaksanakan baris gilir mesej, seperti menggunakan perisian tengah mesej sumber terbuka seperti RabbitMQ atau Kafka, atau menggunakan perkhidmatan mesej penyedia perkhidmatan awan.

Kami menggunakan rangka kerja Gin untuk melaksanakan baris gilir mesej yang paling mudah Kodnya adalah seperti berikut:

package main

import (
    "sync"

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

var (
    msgList []string // 消息列表
    mutex   sync.Mutex
)

func main() {
    // 设置路由
    router := gin.Default()
    router.POST("/message", func(c *gin.Context) {
        // 读取消息内容
        message, exists := c.GetPostForm("message")
        if !exists {
            c.JSON(400, gin.H{"msg": "message is required"})
            return
        }

        // 将消息加入到消息列表
        mutex.Lock()
        msgList = append(msgList, message)
        mutex.Unlock()

        c.JSON(200, gin.H{"msg": "message added"})
    })

    router.GET("/message", func(c *gin.Context) {
        // 从消息列表中取出消息
        mutex.Lock()
        if len(msgList) == 0 {
            c.JSON(200, gin.H{"msg": "no message"})
            mutex.Unlock()
            return
        }

        // 取出最早加入的一条消息
        message := msgList[0]
        msgList = msgList[1:]
        mutex.Unlock()

        c.JSON(200, gin.H{"msg": message})
    })

    // 启动服务
    router.Run(":8080")
}

Dalam kod di atas, kami menggunakan kepingan untuk menyimpan mesej dan menggunakan kunci mutex untuk memastikan. berbilang itu Penyegerakan hirisan semasa operasi baca dan tulis. Untuk setiap mesej yang ditambahkan dalam permintaan, kami menambahkannya pada senarai mesej. Untuk permintaan membaca mesej daripada baris gilir mesej, kami mengambil mesej dari awal senarai mesej dan mengalih keluarnya daripada senarai mesej.

Ringkasan

Artikel ini memperkenalkan cara menggunakan rangka kerja Gin untuk melaksanakan fungsi baris gilir tugas dan baris gilir mesej. Barisan tugas dan baris gilir mesej adalah komponen sistem teragih yang penting dan digunakan secara meluas. Dengan menggunakan rangka kerja Gin untuk melaksanakan kedua-dua baris gilir ini, kami boleh melakukan pemprosesan tugas tak segerak dan komunikasi mesej dengan lebih fleksibel. Pada masa yang sama, ini juga menunjukkan fleksibiliti dan kebolehlanjutan rangka kerja Gin, membolehkan ia digunakan dalam lebih banyak kes penggunaan yang berbeza.

Atas ialah kandungan terperinci Gunakan rangka kerja Gin untuk melaksanakan fungsi baris gilir tugas dan baris gilir mesej. 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