在Golang中實現消息隊列可以使用Golang的內置庫和第三方庫來實現。以下是兩種常見的實現方式:
package main
import (
"fmt"
)
func main() {
queue := make(chan string, 10) // 定義一個容量為10的channel作為隊列
go func() {
for i := 0; i < 10; i++ {
queue <- fmt.Sprintf("message %d", i) // 發送消息到隊列
}
close(queue) // 關閉隊列
}()
for msg := range queue { // 從隊列接收消息
fmt.Println(msg)
}
}
package main
import (
"log"
"github.com/streadway/amqp"
)
func main() {
conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/") // 連接到RabbitMQ服務器
if err != nil {
log.Fatal(err)
}
defer conn.Close()
ch, err := conn.Channel() // 創建一個channel
if err != nil {
log.Fatal(err)
}
defer ch.Close()
q, err := ch.QueueDeclare(
"my_queue", // 隊列名稱
false, // 是否持久化
false, // 是否自動刪除
false, // 是否排他性
false, // 是否等待服務器響應
nil, // 其他屬性
)
if err != nil {
log.Fatal(err)
}
msgs, err := ch.Consume(
q.Name, // 隊列名稱
"", // 消費者名稱
true, // 是否自動確認消息
false, // 是否獨占
false, // 是否阻塞
false, // 其他屬性
)
if err != nil {
log.Fatal(err)
}
for msg := range msgs {
log.Printf("Received message: %s", msg.Body)
}
}
以上是兩種常見的實現消息隊列的方式,選擇哪種方式取決于具體的需求和場景。