ZBLOG

golang rabbitmq进程守护脚本

以下是一个简单的 golang RabbitMQ 进程守护脚本示例,使用了 github.com/streadway/amqp 包来连接 RabbitMQ 服务器并启动消费者。

package main

import (
    "fmt"
    "log"
    "os"
    "os/signal"
    "syscall"

    "github.com/streadway/amqp"
)

func main() {
    // 连接到 RabbitMQ 服务器
    conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")
    if err != nil {
        log.Fatalf("Error connecting to RabbitMQ server: %s", err)
    }
    
    defer conn.Close()

    ch, err := conn.Channel()
    if err != nil {
        log.Fatalf("Error opening channel: %s", err)
    }

    defer ch.Close()

    q, err := ch.QueueDeclare(
        "hello", // 队列名
        false,   // 是否持久化
        false,   // 是否自动删除
        false,   // 是否排他性队列(只能被当前连接访问)
        false,   // 是否等待消费者确认消息接收(RabbitMQ 3.0+)
        nil,
     )
     if err != nil {
         log.Fatalf("Error declaring queue: %s", err)
     }

     msgs, err := ch.Consume(
         q.Name,
         "",
         true,
         false,
         false,
         false,
         nil,
     )

     if err != nil {
         log.Fatalf("Error consuming messages from queue: %s", err)
     }

     doneChan := make(chan bool)

     go func() {
         for d := range msgs {
             fmt.Printf("Received a message: %s\n", d.Body)
         }
     }()

     fmt.Println("Consumer started. Waiting for messages...")

     // 等待信号来停止程序
     sigChan := make(chan os.Signal, 1)
     signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)

     <-sigChan

     fmt.Println("Stopping consumer...")
     doneChan <- true
}

该脚本使用 amqp.Dial 函数连接到 RabbitMQ 服务器,并使用 ch.QueueDeclarech.Consume 函数声明队列并启动消费者。当收到 SIGINT 或 SIGTERM 信号时,它将退出并关闭消费者。

您可以在此基础上扩展该脚本,例如添加重试逻辑以处理与 RabbitMQ 的连接中断和重新连接等情况。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=5814

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?