Skip to content

go-coldbrew/grpcpool

CI Go Report Card GoDoc License: MIT

grpcpool

import "github.com/go-coldbrew/grpcpool"

grpcpool is a pool of grpc.ClientConns. It implements grpc.ClientConnInterface to enable it to be used directly with generated proto stubs. It is based on https://github.com/googleapis/google-api-go-client/blob/v0.115.0/transport/grpc/pool.go

Index

ConnPool is a pool of grpc.ClientConns.

type ConnPool interface {
    // Conn returns a ClientConn from the pool.
    //
    // Conns aren't returned to the pool.
    Conn() *grpc.ClientConn

    // Num returns the number of connections in the pool.
    //
    // It will always return the same value.
    Num() int

    // Close closes every ClientConn in the pool.
    //
    // The error returned by Close may be a single error or multiple errors.
    Close() error

    // ConnPool implements grpc.ClientConnInterface to enable it to be used directly with generated proto stubs.
    grpc.ClientConnInterface
}

func Dial

func Dial(target string, num uint, opts ...grpc.DialOption) (ConnPool, error)

Dial creates a new ConnPool with num connections to target.

func DialContext(_ context.Context, target string, num uint, opts ...grpc.DialOption) (ConnPool, error)

DialContext creates a new ConnPool with num connections to target.

Note: The ctx parameter is retained for backward compatibility but is not used. Cancellation and deadlines in ctx do not affect connection creation.

func New

func New(conns []*grpc.ClientConn) ConnPool

New creates a new ConnPool from the given connections.

Example

package main

import (
	"fmt"

	"github.com/go-coldbrew/grpcpool"
	"google.golang.org/grpc"
	"google.golang.org/grpc/credentials/insecure"
)

func main() {
	// Create individual gRPC connections (NewClient is lazy — no real connection yet)
	conn1, err := grpc.NewClient("localhost:9090",
		grpc.WithTransportCredentials(insecure.NewCredentials()))
	if err != nil {
		panic(err)
	}
	conn2, err := grpc.NewClient("localhost:9090",
		grpc.WithTransportCredentials(insecure.NewCredentials()))
	if err != nil {
		panic(err)
	}

	// Create a round-robin pool from existing connections
	pool := grpcpool.New([]*grpc.ClientConn{conn1, conn2})
	defer pool.Close()

	fmt.Println("pool size:", pool.Num())
}

Generated by gomarkdoc

About

Round-robin gRPC connection pool implementing grpc.ClientConnInterface

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors