common增加nats消息队列支持
This commit is contained in:
140
nats/nats_test.go
Normal file
140
nats/nats_test.go
Normal file
@@ -0,0 +1,140 @@
|
||||
package nats
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/nats-io/nats.go/jetstream"
|
||||
)
|
||||
|
||||
// TestNatsBasicOperations 测试基础操作
|
||||
func TestNatsBasicOperations(t *testing.T) {
|
||||
// 测试连接状态
|
||||
if !IsConnected() {
|
||||
t.Log("NATS 未连接")
|
||||
}
|
||||
|
||||
// 测试连接状态获取
|
||||
state := GetConnState()
|
||||
t.Logf("当前连接状态: %d", state)
|
||||
}
|
||||
|
||||
// TestNatsMetrics 测试监控指标
|
||||
func TestNatsMetrics(t *testing.T) {
|
||||
metrics := GetMetrics()
|
||||
t.Logf("发布计数: %d", metrics.PublishCount.Load())
|
||||
t.Logf("发布错误: %d", metrics.PublishError.Load())
|
||||
t.Logf("请求计数: %d", metrics.RequestCount.Load())
|
||||
}
|
||||
|
||||
// TestNatsConnStateListener 测试连接状态监听
|
||||
func TestNatsConnStateListener(t *testing.T) {
|
||||
listener := func(state ConnState, err error) {
|
||||
fmt.Printf("连接状态变化: %d, 错误: %v\n", state, err)
|
||||
}
|
||||
|
||||
RegisterConnStateListener(listener)
|
||||
defer UnregisterConnStateListener(listener)
|
||||
|
||||
time.Sleep(1 * time.Second)
|
||||
}
|
||||
|
||||
// TestNatsStreamOperations 测试流操作
|
||||
func TestNatsStreamOperations(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
|
||||
// 创建任务流
|
||||
err := CreateTaskStream(ctx, "test_tasks", []string{"test.task.>"})
|
||||
if err != nil {
|
||||
t.Logf("创建任务流失败: %v", err)
|
||||
}
|
||||
|
||||
// 获取流信息
|
||||
info, err := GetStream(ctx, "test_tasks")
|
||||
if err != nil {
|
||||
t.Logf("获取流信息失败: %v", err)
|
||||
} else {
|
||||
t.Logf("流信息: %s", info.Config.Name)
|
||||
}
|
||||
|
||||
// 列出所有流
|
||||
streams, err := ListStreams(ctx)
|
||||
if err != nil {
|
||||
t.Logf("列出流失败: %v", err)
|
||||
} else {
|
||||
t.Logf("流列表: %v", streams)
|
||||
}
|
||||
|
||||
// 删除流
|
||||
err = DeleteStream(ctx, "test_tasks")
|
||||
if err != nil {
|
||||
t.Logf("删除流失败: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
// TestNatsConsumerOperations 测试消费者操作
|
||||
func TestNatsConsumerOperations(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
|
||||
// 创建测试流
|
||||
err := CreateTaskStream(ctx, "test_consumer", []string{"test.consumer.>"})
|
||||
if err != nil {
|
||||
t.Logf("创建流失败: %v", err)
|
||||
}
|
||||
|
||||
// 创建消费者
|
||||
consumerConfig := jetstream.ConsumerConfig{
|
||||
Name: "test_consumer",
|
||||
Durable: "test_consumer",
|
||||
}
|
||||
_, err = CreateConsumer(ctx, "test_consumer", "test_consumer", consumerConfig)
|
||||
if err != nil {
|
||||
t.Logf("创建消费者失败: %v", err)
|
||||
}
|
||||
|
||||
// 获取消费者信息
|
||||
info, err := GetConsumer(ctx, "test_consumer", "test_consumer")
|
||||
if err != nil {
|
||||
t.Logf("获取消费者信息失败: %v", err)
|
||||
} else {
|
||||
t.Logf("消费者信息: %s", info.Name)
|
||||
}
|
||||
|
||||
// 列出消费者
|
||||
consumers, err := ListConsumers(ctx, "test_consumer")
|
||||
if err != nil {
|
||||
t.Logf("列出消费者失败: %v", err)
|
||||
} else {
|
||||
t.Logf("消费者列表: %v", consumers)
|
||||
}
|
||||
|
||||
// 删除消费者
|
||||
err = DeleteConsumer(ctx, "test_consumer", "test_consumer")
|
||||
if err != nil {
|
||||
t.Logf("删除消费者失败: %v", err)
|
||||
}
|
||||
|
||||
// 清理流
|
||||
_ = DeleteStream(ctx, "test_consumer")
|
||||
}
|
||||
|
||||
// TestNatsPublishRequest 测试发布和请求
|
||||
func TestNatsPublishRequest(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
|
||||
// 发布消息
|
||||
err := Publish(ctx, "test.publish", []byte("hello"))
|
||||
if err != nil {
|
||||
t.Logf("发布消息失败: %v", err)
|
||||
}
|
||||
|
||||
// RPC 请求
|
||||
response, err := Request(ctx, "test.request", []byte("request"), 5*time.Second)
|
||||
if err != nil {
|
||||
t.Logf("RPC 请求失败: %v", err)
|
||||
} else {
|
||||
t.Logf("RPC 响应: %s", string(response))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user