[ISSUE #473] support nsresolver in TraceConfig

keep NamesrvAddrs config and add Resolver for TraceConfig
diff --git a/examples/consumer/trace/main.go b/examples/consumer/trace/main.go
index 35c4926..4daaa9f 100644
--- a/examples/consumer/trace/main.go
+++ b/examples/consumer/trace/main.go
@@ -31,8 +31,8 @@
 func main() {
 	namesrvs := []string{"127.0.0.1:9876"}
 	traceCfg := &primitive.TraceConfig{
-		Access:       primitive.Local,
-		NamesrvAddrs: namesrvs,
+		Access:   primitive.Local,
+		Resolver: primitive.NewPassthroughResolver(namesrvs),
 	}
 
 	c, _ := rocketmq.NewPushConsumer(
diff --git a/examples/producer/trace/main.go b/examples/producer/trace/main.go
index 5f2c9b3..e6a25a9 100644
--- a/examples/producer/trace/main.go
+++ b/examples/producer/trace/main.go
@@ -31,8 +31,8 @@
 func main() {
 	namesrvs := []string{"127.0.0.1:9876"}
 	traceCfg := &primitive.TraceConfig{
-		Access:       primitive.Local,
-		NamesrvAddrs: namesrvs,
+		Access:   primitive.Local,
+		Resolver: primitive.NewPassthroughResolver(namesrvs),
 	}
 
 	p, _ := rocketmq.NewProducer(
diff --git a/internal/trace.go b/internal/trace.go
index f0c643c..321552f 100644
--- a/internal/trace.go
+++ b/internal/trace.go
@@ -241,7 +241,18 @@
 		t = TraceTopicPrefix + traceCfg.TraceTopic
 	}
 
-	srvs, err := NewNamesrv(primitive.NewPassthroughResolver(traceCfg.NamesrvAddrs))
+	if len(traceCfg.NamesrvAddrs) == 0 && traceCfg.Resolver == nil {
+		panic("no NamesrvAddrs or Resolver configured")
+	}
+
+	var srvs *namesrvs
+	var err error
+	if len(traceCfg.NamesrvAddrs) > 0 {
+		srvs, err = NewNamesrv(primitive.NewPassthroughResolver(traceCfg.NamesrvAddrs))
+	} else {
+		srvs, err = NewNamesrv(traceCfg.Resolver)
+	}
+
 	if err != nil {
 		panic(errors.Wrap(err, "new Namesrv failed."))
 	}
diff --git a/primitive/trace.go b/primitive/trace.go
index c0df5b3..53a13f0 100644
--- a/primitive/trace.go
+++ b/primitive/trace.go
@@ -23,5 +23,6 @@
 	GroupName    string
 	Access       AccessChannel
 	NamesrvAddrs []string
+	Resolver     NsResolver
 	Credentials  // acl config for trace. omit if acl is closed on broker.
 }