hepa-calc-api/core/rabbitMq.go

81 lines
1.9 KiB
Go

package core
import (
"fmt"
"hepa-calc-api/api/amqp/consumer"
"hepa-calc-api/extend/rabbitMq"
"hepa-calc-api/utils"
)
// StartRabbitMq 启动rabbitmq
func StartRabbitMq() {
err := rabbitMq.NewRabbitMQClient()
if err != nil {
utils.LogJsonErr("启动rabbitmq:", err.Error())
panic(err.Error())
}
// 保持连接
go rabbitMq.HandleReconnect()
fmt.Println("初始化rabbitMq成功......")
}
// StartRabbitMqConsume 启动消费者端
func StartRabbitMqConsume() {
// 用户优惠卷过期
s := rabbitMq.ConsumeS{
QueueName: "user.coupon.expired.delay.queue",
ExchangeName: "amqp.delay.direct",
RoutingKey: "UserCouponExpired",
Handler: consumer.UserCouponExpire,
}
go startConsumer(s)
// 系统优惠卷过期
s = rabbitMq.ConsumeS{
QueueName: "coupon.expired.delay.queue",
ExchangeName: "amqp.delay.direct",
RoutingKey: "CouponExpired",
Handler: consumer.CouponExpire,
}
go startConsumer(s)
// 取消未支付订单
s = rabbitMq.ConsumeS{
QueueName: "cancel.unpay.order.delay.queue",
ExchangeName: "amqp.delay.direct",
RoutingKey: "CancelUnPayOrder",
Handler: consumer.CancelUnPayOrder,
}
go startConsumer(s)
// 用户会员过期
s = rabbitMq.ConsumeS{
QueueName: "user.member.expired.delay.queue",
ExchangeName: "amqp.delay.direct",
RoutingKey: "UserMemberExpired",
Handler: consumer.UserMemberExpire,
}
go startConsumer(s)
}
// startConsumer 启动指定的消费者协程
func startConsumer(s rabbitMq.ConsumeS) {
go func() {
defer func() {
if r := recover(); r != nil {
utils.LogJsonErr(fmt.Sprintf("消费者协程崩溃 - %s", s.QueueName), fmt.Errorf("%v", r))
// 重新启动客户端
StartRabbitMq()
}
}()
err := s.Consume()
if err != nil {
fmt.Println(err.Error())
utils.LogJsonErr(fmt.Sprintf("启动消费者队列失败 - %s", s.QueueName), err)
}
}()
}