fox/rmq/rmq_test.go
2025-08-27 23:02:26 +08:00

80 lines
1.8 KiB
Go

package rmq
import (
"context"
"github.com/fox/fox/log"
"os"
"os/signal"
"syscall"
"testing"
"time"
)
//const url = "amqp://samba:samba@testbuild.shoa.com:5672/vh_samba"
//const exchangeName = "test_e"
//const queueName = "test_q"
func initLog() {
log.Open("test.log", log.DebugL)
}
func TestRabbitmq(t *testing.T) {
initLog()
// 加载配置
rabbitConfig := LoadRabbitMQConfig()
// 创建连接
conn, err := NewConnection(rabbitConfig)
if err != nil {
log.ErrorF("Failed to create RabbitMQ connection: %v", err)
return
}
defer func() { _ = conn.Close() }()
// 启动重连监控
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
go conn.Reconnect(ctx)
// 创建生产者
producer := NewProducer(conn, rabbitConfig)
defer func() { _ = producer.Close() }()
// 创建消费者处理器
handler := func(ctx context.Context, msg string) error {
log.InfoF("Processing message: %s", msg)
// 这里实现具体的业务逻辑
time.Sleep(1 * time.Second) // 模拟处理时间
return nil
}
// 创建消费者
consumer := NewConsumer(conn, rabbitConfig, handler)
defer func() { _ = consumer.Close() }()
// 启动消费者
if err = consumer.StartConsuming(ctx); err != nil {
log.ErrorF("Failed to start consumer: %v", err)
return
}
// 示例:发送测试消息
go func() {
time.Sleep(2 * time.Second) // 等待消费者启动
testMessage := "hello world"
if err = producer.Publish(ctx, testMessage); err != nil {
log.ErrorF("Failed to publish test message: %v", err)
} else {
log.Info("Test message published successfully")
}
}()
// 等待中断信号
sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
<-sigChan
log.Info("Shutting down...")
cancel()
}