Documentation ¶
Index ¶
- Constants
- Variables
- type Balancer
- type DummyBalancer
- type DummyRequestHooks
- type HealthChecker
- type LBClient
- func (c *LBClient) Do(req *fasthttp.Request, resp *fasthttp.Response) error
- func (c *LBClient) DoDeadline(req *fasthttp.Request, resp *fasthttp.Response, deadline time.Time) error
- func (c *LBClient) DoDeadlineWB(req *fasthttp.Request, resp *fasthttp.Response, deadline time.Time, b Balancer) error
- func (c *LBClient) DoTimeout(req *fasthttp.Request, resp *fasthttp.Response, timeout time.Duration) error
- func (c *LBClient) DoTimeoutWB(req *fasthttp.Request, resp *fasthttp.Response, timeout time.Duration, ...) error
- func (c *LBClient) DoWB(req *fasthttp.Request, resp *fasthttp.Response, b Balancer) error
- type PenalizingClient
- type RequestHooker
Constants ¶
const ( DefaultTimeout = time.Second DefaultPenalty = time.Second * 3 )
Variables ¶
var ErrNoAliveClients = errors.New("no alive clients available")
Functions ¶
This section is empty.
Types ¶
type Balancer ¶
type Balancer interface {
Evaluate([]PenalizingClient) *PenalizingClient
}
Clients balancer interface.
type DummyBalancer ¶
type DummyBalancer struct{}
func (*DummyBalancer) Evaluate ¶
func (b *DummyBalancer) Evaluate(_ []PenalizingClient) *PenalizingClient
type DummyRequestHooks ¶
type DummyRequestHooks struct{}
func (*DummyRequestHooks) PostRequest ¶
func (h *DummyRequestHooks) PostRequest(_ *fasthttp.Request, _ *fasthttp.Response, _ *PenalizingClient, _ error)
func (*DummyRequestHooks) PreRequest ¶
func (h *DummyRequestHooks) PreRequest(_ *fasthttp.Request, _ *fasthttp.Response, _ *PenalizingClient)
type HealthChecker ¶
type HealthChecker interface {
Check(req *fasthttp.Request, resp *fasthttp.Response, err error) bool
}
Health checker interface.
type LBClient ¶
type LBClient struct { // Array of clients to balance. Clients []fasthttp.BalancingClient // Health check helper. HealthCheck HealthChecker // Timeout duration to execute request. // Will used DefaultTimeout if empty. Timeout time.Duration // Penalty duration to ban the client. Penalty time.Duration // Balancer helper. Balancer Balancer // Request hooks helper. RequestHooker RequestHooker // contains filtered or unexported fields }
Load balancing client.
See https://github.com/valyala/fasthttp/blob/master/lbclient.go for details and comparison.
func (*LBClient) DoDeadline ¶
func (c *LBClient) DoDeadline(req *fasthttp.Request, resp *fasthttp.Response, deadline time.Time) error
Execute request with given deadline.
func (*LBClient) DoDeadlineWB ¶
func (c *LBClient) DoDeadlineWB(req *fasthttp.Request, resp *fasthttp.Response, deadline time.Time, b Balancer) error
Execute request with given deadline and balancer.
func (*LBClient) DoTimeout ¶
func (c *LBClient) DoTimeout(req *fasthttp.Request, resp *fasthttp.Response, timeout time.Duration) error
Execute request with given timeout.
type PenalizingClient ¶
type PenalizingClient struct {
// contains filtered or unexported fields
}
A wrapper around BalancingClient with penalty support.
func (*PenalizingClient) DoDeadline ¶
func (c *PenalizingClient) DoDeadline(req *fasthttp.Request, resp *fasthttp.Response, deadline time.Time) error
Execute request with given deadline.
func (*PenalizingClient) Instance ¶
func (c *PenalizingClient) Instance() fasthttp.BalancingClient
Get inner fasthttp's balancing client instance.
func (*PenalizingClient) RequestStats ¶
func (c *PenalizingClient) RequestStats() (uint64, uint64)
Get two requests metrics: pending requests and total requests counts.
Pending requests value includes penalty counter value.
func (*PenalizingClient) UnderPenalty ¶
func (c *PenalizingClient) UnderPenalty() bool
Check if client is under penalty.
type RequestHooker ¶
type RequestHooker interface { PreRequest(req *fasthttp.Request, resp *fasthttp.Response, client *PenalizingClient) PostRequest(req *fasthttp.Request, resp *fasthttp.Response, client *PenalizingClient, err error) }
Request hooks helper interface.
Needs to perform some actions before and after request's execution.