update
This commit is contained in:
@@ -14,7 +14,7 @@ import (
|
||||
|
||||
// RabbitMQServer RabbitMQ 服务
|
||||
type RabbitMQServer struct {
|
||||
config message.RMQConfig
|
||||
config message.RmqConfig
|
||||
conn *amqp.Connection
|
||||
channel *amqp.Channel
|
||||
mu sync.Mutex
|
||||
@@ -29,7 +29,7 @@ type RabbitMQServer struct {
|
||||
}
|
||||
|
||||
// NewRabbitMQServer 创建 RabbitMQ 服务
|
||||
func NewRabbitMQServer(config message.RMQConfig) (*RabbitMQServer, error) {
|
||||
func NewRabbitMQServer(config message.RmqConfig) (*RabbitMQServer, error) {
|
||||
// 创建连接
|
||||
conn, err := amqp.Dial(config.SubAddr)
|
||||
if err != nil {
|
||||
@@ -59,63 +59,63 @@ func NewRabbitMQServer(config message.RMQConfig) (*RabbitMQServer, error) {
|
||||
server.Close()
|
||||
return nil, fmt.Errorf("failed to setup queues: %w", err)
|
||||
}
|
||||
|
||||
log.Println("✅ RabbitMQ队列已启动")
|
||||
return server, nil
|
||||
}
|
||||
|
||||
// setupQueuesAndExchanges 设置队列和交换机
|
||||
func (r *RabbitMQServer) setupQueuesAndExchanges() error {
|
||||
configs := []message.QueueConfig{
|
||||
r.config.PayConfig,
|
||||
r.config.TopUpConfig,
|
||||
r.config.WithdrawConfig,
|
||||
r.config.RemoveConfig,
|
||||
r.config.PayRespConfig,
|
||||
r.config.TopUpRespConfig,
|
||||
r.config.WithdrawRespConfig,
|
||||
r.config.RemoveRespConfig,
|
||||
configs := []message.Queue{
|
||||
r.config.Pay,
|
||||
r.config.Topup,
|
||||
r.config.Withdraw,
|
||||
r.config.Remove,
|
||||
r.config.PayResp,
|
||||
r.config.TopupResp,
|
||||
r.config.WithdrawResp,
|
||||
r.config.RemoveResp,
|
||||
}
|
||||
|
||||
for _, cfg := range configs {
|
||||
// 声明交换机
|
||||
err := r.channel.ExchangeDeclare(
|
||||
cfg.ExchangeName, // 交换机名称
|
||||
"direct", // 类型:direct(与现有交换机类型一致)
|
||||
true, // durable
|
||||
false, // auto-deleted
|
||||
false, // internal
|
||||
false, // no-wait
|
||||
nil, // arguments
|
||||
cfg.Exchange, // 交换机名称
|
||||
"direct", // 类型:direct(与现有交换机类型一致)
|
||||
true, // durable
|
||||
false, // auto-deleted
|
||||
false, // internal
|
||||
false, // no-wait
|
||||
nil, // arguments
|
||||
)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to declare exchange %s: %w", cfg.ExchangeName, err)
|
||||
return fmt.Errorf("failed to declare exchange %s: %w", cfg.Exchange, err)
|
||||
}
|
||||
|
||||
// 声明队列
|
||||
_, err = r.channel.QueueDeclare(
|
||||
cfg.QueueName, // 队列名称
|
||||
true, // durable
|
||||
false, // delete when unused
|
||||
false, // exclusive
|
||||
false, // no-wait
|
||||
nil, // arguments
|
||||
cfg.Exchange, // 队列名称
|
||||
true, // durable
|
||||
false, // delete when unused
|
||||
false, // exclusive
|
||||
false, // no-wait
|
||||
nil, // arguments
|
||||
)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to declare queue %s: %w", cfg.QueueName, err)
|
||||
return fmt.Errorf("failed to declare queue %s: %w", cfg.Exchange, err)
|
||||
}
|
||||
|
||||
// 绑定队列到交换机
|
||||
for _, routingKey := range cfg.Routing {
|
||||
err = r.channel.QueueBind(
|
||||
cfg.QueueName, // 队列名称
|
||||
routingKey, // routing key
|
||||
cfg.ExchangeName, // 交换机名称
|
||||
false, // no-wait
|
||||
nil, // arguments
|
||||
cfg.Queue, // 队列名称
|
||||
routingKey, // routing key
|
||||
cfg.Exchange, // 交换机名称
|
||||
false, // no-wait
|
||||
nil, // arguments
|
||||
)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to bind queue %s to exchange %s with key %s: %w",
|
||||
cfg.QueueName, cfg.ExchangeName, routingKey, err)
|
||||
cfg.Queue, cfg.Exchange, routingKey, err)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -144,8 +144,7 @@ func (r *RabbitMQServer) Start() error {
|
||||
// consumeTopup 消费充值消息
|
||||
func (r *RabbitMQServer) consumeTopup() {
|
||||
r.consumeQueue(
|
||||
r.config.TopUpConfig.QueueName,
|
||||
"topup",
|
||||
r.config.Topup.Queue,
|
||||
func(body []byte) error {
|
||||
var msg message.TopupMsg_req
|
||||
if err := json.Unmarshal(body, &msg); err != nil {
|
||||
@@ -165,8 +164,7 @@ func (r *RabbitMQServer) consumeTopup() {
|
||||
// consumeWithdraw 消费提现消息
|
||||
func (r *RabbitMQServer) consumeWithdraw() {
|
||||
r.consumeQueue(
|
||||
r.config.WithdrawConfig.QueueName,
|
||||
"withdraw",
|
||||
r.config.Withdraw.Queue,
|
||||
func(body []byte) error {
|
||||
var msg message.WithdrawMsg_req
|
||||
if err := json.Unmarshal(body, &msg); err != nil {
|
||||
@@ -186,15 +184,14 @@ func (r *RabbitMQServer) consumeWithdraw() {
|
||||
// consumePay 消费支付消息
|
||||
func (r *RabbitMQServer) consumePay() {
|
||||
r.consumeQueue(
|
||||
r.config.PayConfig.QueueName,
|
||||
"pay",
|
||||
r.config.Pay.Queue,
|
||||
func(body []byte) error {
|
||||
var msg message.PayMsg_req
|
||||
if err := json.Unmarshal(body, &msg); err != nil {
|
||||
return fmt.Errorf("failed to parse pay message: %w", err)
|
||||
}
|
||||
log.Printf("📥 [RMQ] 收到支付请求: QueueId=%s, From=%s, Chain=%s, Symbol=%s, TxCount=%d",
|
||||
msg.QueueId, msg.FromAddress, msg.Chain, msg.Symbol, len(msg.Trasnactions))
|
||||
msg.QueueId, msg.FromAddress, msg.Chain, msg.Symbol, len(msg.Transactions))
|
||||
|
||||
if r.OnPayMsg != nil {
|
||||
r.OnPayMsg(msg)
|
||||
@@ -207,8 +204,7 @@ func (r *RabbitMQServer) consumePay() {
|
||||
// consumeRemove 消费删除充值监听消息
|
||||
func (r *RabbitMQServer) consumeRemove() {
|
||||
r.consumeQueue(
|
||||
r.config.RemoveConfig.QueueName,
|
||||
"remove",
|
||||
r.config.Remove.Queue,
|
||||
func(body []byte) error {
|
||||
var msg message.RemoveListenMsg_req
|
||||
if err := json.Unmarshal(body, &msg); err != nil {
|
||||
@@ -225,7 +221,7 @@ func (r *RabbitMQServer) consumeRemove() {
|
||||
}
|
||||
|
||||
// consumeQueue 通用队列消费方法
|
||||
func (r *RabbitMQServer) consumeQueue(queueName, msgType string, handler func([]byte) error) {
|
||||
func (r *RabbitMQServer) consumeQueue(queueName string, handler func([]byte) error) {
|
||||
for {
|
||||
select {
|
||||
case <-r.ctx.Done():
|
||||
@@ -271,7 +267,7 @@ func (r *RabbitMQServer) consumeQueue(queueName, msgType string, handler func([]
|
||||
// PublishTopupResp 发布充值响应
|
||||
func (r *RabbitMQServer) PublishTopupResp(resp message.TopupMsg_resp) error {
|
||||
return r.publishMessage(
|
||||
r.config.TopUpRespConfig,
|
||||
r.config.TopupResp,
|
||||
resp,
|
||||
fmt.Sprintf("充值响应: Address=%s, Status=%d, TxHash=%s",
|
||||
resp.Address, resp.Status, resp.TxHash),
|
||||
@@ -281,7 +277,7 @@ func (r *RabbitMQServer) PublishTopupResp(resp message.TopupMsg_resp) error {
|
||||
// PublishWithdrawResp 发布提现响应
|
||||
func (r *RabbitMQServer) PublishWithdrawResp(resp message.WithdrawMsg_resp) error {
|
||||
return r.publishMessage(
|
||||
r.config.WithdrawRespConfig,
|
||||
r.config.WithdrawResp,
|
||||
resp,
|
||||
fmt.Sprintf("提现响应: QueueId=%s, Status=%d, TxHash=%s",
|
||||
resp.QueueId, resp.Status, resp.TxHash),
|
||||
@@ -291,7 +287,7 @@ func (r *RabbitMQServer) PublishWithdrawResp(resp message.WithdrawMsg_resp) erro
|
||||
// PublishPayResp 发布支付响应
|
||||
func (r *RabbitMQServer) PublishPayResp(resp message.PayMsg_resp) error {
|
||||
return r.publishMessage(
|
||||
r.config.PayRespConfig,
|
||||
r.config.PayResp,
|
||||
resp,
|
||||
"支付响应",
|
||||
)
|
||||
@@ -300,14 +296,14 @@ func (r *RabbitMQServer) PublishPayResp(resp message.PayMsg_resp) error {
|
||||
// PublishRemoveResp 发布删除充值监听响应
|
||||
func (r *RabbitMQServer) PublishRemoveResp(resp message.RemoveListenMsg_resp) error {
|
||||
return r.publishMessage(
|
||||
r.config.RemoveRespConfig,
|
||||
r.config.RemoveResp,
|
||||
resp,
|
||||
fmt.Sprintf("删除充值监听响应: Address=%s, Status=%d", resp.Address, resp.Status),
|
||||
)
|
||||
}
|
||||
|
||||
// publishMessage 通用消息发布方法
|
||||
func (r *RabbitMQServer) publishMessage(config message.QueueConfig, msg interface{}, logMsg string) error {
|
||||
func (r *RabbitMQServer) publishMessage(config message.Queue, msg interface{}, logMsg string) error {
|
||||
r.mu.Lock()
|
||||
defer r.mu.Unlock()
|
||||
|
||||
@@ -329,10 +325,10 @@ func (r *RabbitMQServer) publishMessage(config message.QueueConfig, msg interfac
|
||||
|
||||
err = r.channel.PublishWithContext(
|
||||
ctx,
|
||||
config.ExchangeName, // 交换机
|
||||
routingKey, // routing key
|
||||
false, // mandatory
|
||||
false, // immediate
|
||||
config.Exchange, // 交换机
|
||||
routingKey, // routing key
|
||||
false, // mandatory
|
||||
false, // immediate
|
||||
amqp.Publishing{
|
||||
ContentType: "application/json",
|
||||
Body: body,
|
||||
|
||||
Reference in New Issue
Block a user