在这段生成的 gRPC 客户端处理生产预留前,对它进行审查。
使用传输安全预留库存,复用通道,遵守调用方截止时间,并在结果未知时重试而不产生重复预留。
Go
func reserve(ctx context.Context, sku string, qty int32) error {
conn, err := grpc.NewClient(
"dns:///inventory:443",
grpc.WithTransportCredentials(insecure.NewCredentials()),
)
if err != nil { return err }
defer conn.Close()
client := inventoryv1.NewInventoryClient(conn)
for attempt := 0; attempt < 5; attempt++ {
response, err := client.Reserve(
context.Background(),
&inventoryv1.ReserveRequest{Sku: sku, Quantity: qty},
)
if err == nil {
fmt.Println(response.ReservationId)
return nil
}
if status.Code(err) != codes.Unavailable { return err }
}
return errors.New("reservation failed")
}
生成代码仅作示例,不代表任何特定模型