一波更新
This commit is contained in:
59
trunk/center/common/rabbitmq/config.go
Normal file
59
trunk/center/common/rabbitmq/config.go
Normal 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: %s,err:%s", rabbitMQAddress, err.Error())
|
||||
}
|
||||
|
||||
// 打开一个通道
|
||||
RabbitMQChannel, err = RabbitMQConn.Channel()
|
||||
if err != nil {
|
||||
|
||||
//抛出一个异常
|
||||
logUtil.FatalLog("Failed to open a channel,err:%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 queue,queueName:%s,err:%s", queueName, err.Error())
|
||||
}
|
||||
}
|
||||
}
|
||||
55
trunk/center/common/rabbitmq/consume_data.go
Normal file
55
trunk/center/common/rabbitmq/consume_data.go
Normal 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 consumer,err:%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())
|
||||
}
|
||||
}
|
||||
}()
|
||||
}
|
||||
}
|
||||
34
trunk/center/common/rabbitmq/send_data.go
Normal file
34
trunk/center/common/rabbitmq/send_data.go
Normal 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 message,err:%s", err.Error())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user