discovery

package
v0.0.0-...-d989b54 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 15, 2020 License: MIT Imports: 19 Imported by: 2

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ConnectTimeout     = time.Duration(5) * time.Second
	ReadTimeout        = time.Duration(10) * time.Second
	WriteTimeout       = time.Duration(10) * time.Second
	DefaultRegistryTTL = time.Duration(60) * time.Second

	Stdout io.Writer = os.Stdout
	Stderr io.Writer = os.Stderr

	SchemaHttp = "http"
	SchemaRpc  = "rpc"

	ErrNoService   = errors.New("has no service")
	ErrNoScheduler = errors.New("has no scheduler")
	ErrNoSchema    = errors.New("has no schema")
)
View Source
var (
	ErrTypeInValid = errors.New("stream from pool is invalid")
	ErrSendTimeout = errors.New("stream send timeout")
)

Functions

func GenRandomId

func GenRandomId(prefix ...string) string

func NewInstance

func NewInstance(id, serviceName string, Addrs map[string]string) *dm.Instance

注意,id每个节点确保唯一,否则会相互覆盖,服务发现列表中会丢失节点!!!类似于gokeepr中的nodeId

func NewPollsStreamPool

func NewPollsStreamPool(client pb.DiscoveryClient, initCap, maxCap int, idleTimeout time.Duration) (pool.Pool, error)

func Polls

func Polls(p pool.Pool, req *pb.PollsReq, opts ...OpPollsCallOption) (resp *pb.PollsResp, err error)

@todo 如果server端处理能力不足,导致server recv buffer full(stream level),此时Send会阻塞,这时应该如何处理???

Types

type Client

type Client struct {
	// contains filtered or unexported fields
}

服务发现的client结构体

func New

func New(discoveryAddr string, opts ...OpOption) *Client

func (*Client) Deregister

func (client *Client) Deregister() error

解除服务注册

func (*Client) GetService

func (client *Client) GetService(serviceName string) (*dm.Service, error)

获取服务列表信息

func (*Client) GetServiceAddr

func (client *Client) GetServiceAddr(serviceName, schema string) (string, error)

根据负载均衡策略,随机选择服务中的某个instance,返回节点addr

func (*Client) SignalDeregister

func (client *Client) SignalDeregister(exit bool, signals ...os.Signal)

发送信号进行解注册

func (*Client) Work

func (client *Client) Work()

type OpOption

type OpOption func(option *option)

func WithDiscovery

func WithDiscovery(subscriber string, serviceNames []string) OpOption

设置要发现的服务列表,如果不需要服务发现,不用调用该函数 subscriber为服务的订阅者,理论上subscriber是唯一的,例如live订阅了counter的服务,此时subscriber为live,serviceNames为[]string{"counter"}

func WithPersistence

func WithPersistence() OpOption

持久化文件设置

func WithRegistry

func WithRegistry(instance *dm.Instance) OpOption

设置要注册的服务,如果没有服务需要注册,不用调用该函数

func WithRegistryTTL

func WithRegistryTTL(ttl time.Duration) OpOption

设置续约时长,ttl为租约时长,每隔ttl/3续约一次

func WithScheduler

func WithScheduler(schedulers map[string]schedule.Scheduler) OpOption

设置负载均衡调度器,如果不需要服务发现,不用调用该函数 如果需要服务发现而不调用该函数,默认选择随机负载均衡调度器 @todo 在项目中动态设置负载均衡调度器

type OpPollsCallOption

type OpPollsCallOption func(o *pollsCallOption)

func WithPollsCallRetryTimes

func WithPollsCallRetryTimes(retryTimes int) OpPollsCallOption

func WithPollsCallTimeout

func WithPollsCallTimeout(timeout time.Duration) OpPollsCallOption

type PollsStream

type PollsStream struct {
	pb.Discovery_PollsClient
	// contains filtered or unexported fields
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL