Browse Source

sync.pool

lijian 4 years ago
parent
commit
43ba9df430
1 changed files with 10 additions and 1 deletions
  1. 10 1
      pkg/ruleEngine/nodes/rest_api_request_node.go

+ 10 - 1
pkg/ruleEngine/nodes/rest_api_request_node.go

@@ -9,6 +9,7 @@ import (
 	"sparrow/pkg/ruleEngine"
 	"sparrow/pkg/server"
 	"sparrow/pkg/utils"
+	"sync"
 	"time"
 )
 
@@ -28,6 +29,7 @@ type RestApiRequestNode struct {
 	pool   *grpool.Pool
 	config *RestApiRequestNodeConfig
 	client *utils.HttpClient
+	bufPool sync.Pool
 }
 
 func (r *RestApiRequestNode) Init(ctx ruleEngine.Context, config string) error {
@@ -53,6 +55,11 @@ func (r *RestApiRequestNode) Init(ctx ruleEngine.Context, config string) error {
 		r.config.Retry, time.Duration(r.config.RetryWait)*time.Second)
 	client.SetLogger(server.Log)
 	r.client = client
+	r.bufPool = sync.Pool{
+		New: func() interface{}{
+			return new(bytes.Buffer)
+		},
+	}
 	return nil
 }
 
@@ -65,10 +72,12 @@ func (r *RestApiRequestNode) OnMessage(ctx ruleEngine.Context, message *protocol
 	for k, v := range r.config.Headers {
 		headers[k] = v
 	}
-	w := new(bytes.Buffer)
+	w := r.bufPool.Get().(*bytes.Buffer)
 	if err := json.NewEncoder(w).Encode(body); err != nil {
 		return err
 	}
+	w.Reset()
+	r.bufPool.Put(w)
 	req, err := utils.NewRequest(r.config.Method, r.config.Url, []byte(body))
 	if err != nil {
 		server.Log.Error(err)