重构消息队列模块,新增NATS和RabbitMQ连接实现,移除旧版消息队列代码

This commit is contained in:
2026-01-31 05:17:14 +08:00
committed by 张斌
parent 6acdbb6e88
commit ee6d3c9033
17 changed files with 966 additions and 2391 deletions

View File

@@ -0,0 +1,109 @@
package message
import (
"context"
"fmt"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/util/gconv"
amqp "github.com/rabbitmq/amqp091-go"
"sync"
"time"
)
var (
conn *amqp.Connection
channel *amqp.Channel
rabbitmqMu sync.RWMutex
)
// config RabbitMQ 配置
type config struct {
Host string
Port int
Username string
Password string
VHost string
}
func rabbitmqConnect(ctx context.Context) error {
rabbitmqMu.Lock()
defer rabbitmqMu.Unlock()
LOOP:
cfg := &config{
Host: g.Cfg().MustGet(ctx, "rabbitmq.host").String(),
Port: g.Cfg().MustGet(ctx, "rabbitmq.port").Int(),
Username: g.Cfg().MustGet(ctx, "rabbitmq.username").String(),
Password: g.Cfg().MustGet(ctx, "rabbitmq.password").String(),
VHost: g.Cfg().MustGet(ctx, "rabbitmq.vhost", "/").String(),
}
url := "amqp://" + cfg.Username + ":" + cfg.Password + "@" + cfg.Host + ":" + gconv.String(cfg.Port) + "/" + cfg.VHost
var err error
conn, err = amqp.Dial(url)
if err != nil {
g.Log().Errorf(ctx, "重连失败: %v", err)
time.Sleep(2 * time.Second)
goto LOOP
}
channel, err = conn.Channel()
if err != nil {
g.Log().Errorf(ctx, "创建 Channel 失败: %v", err)
time.Sleep(2 * time.Second)
goto LOOP
}
g.Log().Info(ctx, "RabbitMQ 重连成功")
return nil
}
// rabbitmqReconnect 重新连接
func rabbitmqReconnect(ctx context.Context) error {
if err := rabbitmqConnect(ctx); err != nil {
return fmt.Errorf("nats重连失败: %w", err)
}
return nil
}
// rabbitmqPing 检测 RabbitMQ 连接状态
func rabbitmqPing() bool {
rabbitmqMu.RLock()
defer rabbitmqMu.RUnlock()
if conn == nil || conn.IsClosed() {
return false
}
return true
}
// rabbitmqClose 关闭连接
func rabbitmqClose(ctx context.Context) error {
rabbitmqMu.Lock()
defer rabbitmqMu.Unlock()
var lastErr error
if channel != nil {
if err := channel.Close(); err != nil {
g.Log().Errorf(ctx, "关闭 RabbitMQ Channel 失败: %v", err)
lastErr = err
}
channel = nil
}
if conn != nil {
if err := conn.Close(); err != nil {
g.Log().Errorf(ctx, "关闭 RabbitMQ 连接失败: %v", err)
lastErr = err
}
conn = nil
}
g.Log().Info(ctx, "RabbitMQ 连接已关闭")
return lastErr
}