- 首先,理解 Neptune 限流的原因:AWS Neptune 是作为一种无服务器的图数据库服务,为了保障数据库系统的安全和稳定,会对客户端发起的请求进行限流和监控。当客户端发起的请求超过 Neptune 可接受的限制时,Neptune 会返回“请求被限制”的错误。
- 使用 gremlin-go 连接 Neptune 数据库时,需要设置一个密钥和端点,例如:
import (
"context"
"fmt"
"github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/service/secretsmanager"
"github.com/aws/aws-sdk-go-v2/service/secretsmanager/types"
gremcos "github.com/aws/aws-sdk-go-v2/service/neptune/gremlin"
)
func main() {
secretName := "neptune-secret"
endpoint := "neptune-endpoint"
cfg, err := config.LoadDefaultConfig(context.Background())
if err != nil {
panic(fmt.Sprintf("failed to load SDK configuration, %v", err))
}
svc := secretsmanager.NewFromConfig(cfg)
res, err := svc.GetSecretValue(context.TODO(), &secretsmanager.GetSecretValueInput{
SecretId: &secretName,
})
if err != nil {
panic(fmt.Sprintf("failed to get secret value, %v", err))
}
result := &types.SecretString{}
err = res.SecretString.Unmarshal(result)
if err != nil {
panic(fmt.Sprintf("failed to unmarshal secret, %v", err))
}
token := *result.SecretStringData["token"]
endpoint := *result.SecretStringData["endpoint"]
client, err := gremcos.NewFromConfig(cfg, gremcos.WithEndpoint(endpoint), gremcos.WithAuthToken(token))
if err != nil {
panic(fmt.Sprintf("failed to create Neptune client, %v", err))
}
// perform some Gremlin queries here
}
- 在执行 Gremlin 查询之前,我们需要创建一个
context.Context
实例,然后使用 Do
方法向 Neptune 发送查询:
ctx := context.Background()
req := gremcos.NewGremlinRequest().
Add(string(query), arguments...).
SetProcessor("traversal").
SetOp("eval")
res, err := client.Do(ctx, req)
if err != nil {
panic(fmt.Sprintf("failed to execute Gremlin query, %v", err))
}
- 由于 Neptune