一波更新

This commit is contained in:
tangping
2025-01-23 16:12:49 +08:00
parent 22ac6c1fed
commit 5f3a40a50e
90 changed files with 2392 additions and 1791 deletions

View File

@@ -0,0 +1,59 @@
package rabbitmq
import (
configYaml "common/configsYaml"
"goutil/logUtil"
"strconv"
"github.com/streadway/amqp"
)
var RabbitMQConn *amqp.Connection
var RabbitMQChannel *amqp.Channel
// 初始化rabbitMQ
func init() {
rabbitMQAddress := configYaml.GetRabbitMQAddress()
//是否有mq配置
if rabbitMQAddress == "" {
return
}
// 连接到 RabbitMQ 服务器
var err error
RabbitMQConn, err = amqp.Dial(rabbitMQAddress)
if err != nil {
//抛出一个异常
logUtil.FatalLog("Failed to connect to RabbitMQ: %serr:%s", rabbitMQAddress, err.Error())
}
// 打开一个通道
RabbitMQChannel, err = RabbitMQConn.Channel()
if err != nil {
//抛出一个异常
logUtil.FatalLog("Failed to open a channelerr:%s", err.Error())
}
//循环数据库数量
for _, index := range configYaml.GetDBNum() {
//队列名称
queueName := configYaml.GetRabbitMQName() + ":" + strconv.Itoa(index)
// 声明一个队列
_, err = RabbitMQChannel.QueueDeclare(
queueName, // 队列名称
true, // 是否持久化
false, // 是否在使用后删除
false, // 是否排他
false, // 是否阻塞
nil, // 其他参数
)
if err != nil {
logUtil.FatalLog("Failed to declare a queuequeueName:%s,err:%s", queueName, err.Error())
}
}
}

View File

@@ -0,0 +1,55 @@
package rabbitmq
import (
configYaml "common/configsYaml"
"goutil/logUtilPlus"
"strconv"
)
// ConsumeData 消费mq数据
func ConsumeData(handler func(data string) error) {
// 确保通道启用了 Publisher Confirms
if err := RabbitMQChannel.Confirm(false); err != nil {
logUtilPlus.ErrorLog("channel could not be put into confirm mode: %w", err)
}
//循环数据库数量
for _, index := range configYaml.GetDBNum() {
rabbitMQName := configYaml.GetRabbitMQName() + ":" + strconv.Itoa(index)
// 注册一个消费者
msgs, err := RabbitMQChannel.Consume(
rabbitMQName, // 队列名称
"", // 消费者名称
false, // 是否自动确认
false, // 是否排他
false, // 是否本地
false, // 是否阻塞
nil, // 其他参数
)
if err != nil {
logUtilPlus.ErrorLog("Failed to register a consumererr:%s", err.Error())
}
// 启动一个 goroutine 来处理消息
go func() {
for d := range msgs {
// 消息处理
if err = handler(string(d.Body)); err != nil {
// 消息处理失败,记录错误日志
logUtilPlus.ErrorLog("Failed to handle message, err:%s", err.Error())
}
// 消息处理完成后手动确认
if err := d.Ack(false); err != nil {
logUtilPlus.ErrorLog("Failed to acknowledge message, err:%s", err.Error())
}
}
}()
}
}

View File

@@ -0,0 +1,34 @@
package rabbitmq
import (
configYaml "common/configsYaml"
"goutil/logUtilPlus"
"strconv"
"github.com/streadway/amqp"
)
// SendMqData 发送单挑mq消息
func SendMqData(dbIndex int32, data string) {
rabbitMQName := configYaml.GetRabbitMQName() + ":" + strconv.Itoa(int(dbIndex))
// 确保通道启用了 Publisher Confirms
if err := RabbitMQChannel.Confirm(false); err != nil {
logUtilPlus.ErrorLog("channel could not be put into confirm mode: %w", err)
}
// 发布消息到队列
err := RabbitMQChannel.Publish(
"", // 交换机名称
rabbitMQName, // 路由键
false, // 是否强制
false, // 是否立即
amqp.Publishing{
ContentType: "text/plain",
Body: []byte(data),
})
if err != nil {
logUtilPlus.ErrorLog("Failed to publish a messageerr:%s", err.Error())
}
}