Привет, я новичок в google pubsub, почему так медленно, когда publi sh сообщает topi c? Иногда это занимает всего 20-30 мс, но иногда может занимать 200 мс - 1 секунду. Я использую docker на GKE. Что-то не так в моем коде? Я не знаю, как это решить. Пожалуйста, помогите мне
Среда
golang: 1.13.1 Docker в GKE
cloud.google.com / go / pubsub v1 .3.1
Код
package publisher
import (
"google.golang.org/api/option"
"cloud.google.com/go/pubsub"
"context"
"errors"
"google.golang.org/api/option"
"fmt"
"time"
)
type Publisher struct {
Client *pubsub.Client
Topic *pubsub.Topic
config Config
}
func (pub *Publisher) initClient(ctx context.Context, project string, opts ...option.ClientOption) error {
pubSubClient, err := pubsub.NewClient(ctx, project, opts...)
if err != nil {
return err
}
pub.Client = pubSubClient
return nil
}
func (pub *Publisher) initTopic(ctx context.Context, topic string) error {
pubTopic := pub.Client.Topic(topic)
if isExist, err := pubTopic.Exists(ctx); err != nil {
return err
} else if !isExist {
return errors.New("Topic " + topic+ " is not exists in this project")
}
pub.Topic = pubTopic
return nil
}
func InitializeWithConfig(project string, topic string, opts ...option.ClientOption) (*Publisher, error) {
var ctx = context.Background()
pub := Publisher{
config: config,
}
if err := pub.initClient(ctx, project, opts...)); err != nil {
return nil, err
}
if err := pub.initTopic(ctx, topic); err != nil {
return nil, err
}
return &pub, nil
}
func (pub *Publisher) Publish(msg string, eventAttr map[string]string) (*string, error) {
var ctx = context.Background()
result := pub.Topic.Publish(ctx, &pubsub.Message{
Data: []byte(msg),
Attributes: eventAttr,
})
id, err := result.Get(ctx)
if err != nil {
return nil, err
}
return &id, nil
}
func main() {
pub, err := InitializeWithConfig("project-name","topic-name",option.WithGRPCConnectionPool(10))
if err != nil {
return err
}
startAt := time.Now()
_, err := pub.Publish("testing", nil)
duration := time.Now().Sub(startAt).Milliseconds()
fmt.Printf("%vms", duration)
}