Documentation ¶
Index ¶
- Constants
- Variables
- func Hash(key uint64, buckets int32) int32
- func HashString(s string) uint64
- func JumpConsistentHash(len int, options ...interface{}) int
- type Breaker
- type Call
- type Caller
- type Client
- func (client *Client) Call(ctx context.Context, servicePath, serviceMethod string, args interface{}, ...) error
- func (client *Client) Close() error
- func (c *Client) Connect(network, address string) error
- func (client *Client) Go(ctx context.Context, servicePath, serviceMethod string, args interface{}, ...) *Call
- func (client *Client) Http2Call(ctx context.Context, servicePath, serviceMethod string, args interface{}, ...) error
- func (client *Client) Http2CallGw(ctx context.Context, servicePath, serviceMethod string, args interface{}, ...) error
- func (client *Client) Http2CallSendRaw(ctx context.Context, r *protocol.Message) (map[string]string, []byte, error)
- func (client *Client) HttpCall(ctx context.Context, servicePath, serviceMethod string, args interface{}, ...) error
- func (client *Client) HttpCallOldStyle(ctx context.Context, servicePath, serviceMethod string, args interface{}, ...) error
- func (client *Client) IsClosing() bool
- func (client *Client) IsShutdown() bool
- func (client *Client) RegisterServerMessageChan(ch chan<- *protocol.Message)
- func (client *Client) SendRaw(ctx context.Context, r *protocol.Message) (map[string]string, []byte, error)
- func (client *Client) SetHttp2SvcNode(k string) error
- func (client *Client) UnregisterServerMessageChan()
- type ClientAfterDecodePlugin
- type ClientBeforeEncodePlugin
- type ClientConnectedPlugin
- type ClientConnectionClosePlugin
- type ConnCreatedPlugin
- type ConnFactoryFn
- type ConsecCircuitBreaker
- type ConsistentAddrStrFunction
- type ConsulDiscovery
- func (d *ConsulDiscovery) Clone(servicePath string) ServiceDiscovery
- func (d *ConsulDiscovery) Close()
- func (d *ConsulDiscovery) GetServices() []*KVPair
- func (d *ConsulDiscovery) RemoveWatcher(ch chan []*KVPair)
- func (d *ConsulDiscovery) SetFilter(filter ServiceDiscoveryFilter)
- func (d *ConsulDiscovery) WatchService() chan []*KVPair
- type EtcdDiscovery
- func (d *EtcdDiscovery) Clone(servicePath string) ServiceDiscovery
- func (d *EtcdDiscovery) Close()
- func (d *EtcdDiscovery) GetServices() []*KVPair
- func (d *EtcdDiscovery) RemoveWatcher(ch chan []*KVPair)
- func (d *EtcdDiscovery) SetFilter(filter ServiceDiscoveryFilter)
- func (d *EtcdDiscovery) WatchService() chan []*KVPair
- type EtcdV3Discovery
- func (d *EtcdV3Discovery) Clone(servicePath string) ServiceDiscovery
- func (d *EtcdV3Discovery) Close()
- func (d *EtcdV3Discovery) GetServices() []*KVPair
- func (d *EtcdV3Discovery) RemoveWatcher(ch chan []*KVPair)
- func (d *EtcdV3Discovery) SetFilter(filter ServiceDiscoveryFilter)
- func (d *EtcdV3Discovery) WatchService() chan []*KVPair
- type FailMode
- type HashServiceAndArgs
- type InprocessDiscovery
- func (d *InprocessDiscovery) Clone(servicePath string) ServiceDiscovery
- func (d *InprocessDiscovery) Close()
- func (d *InprocessDiscovery) GetServices() []*KVPair
- func (d InprocessDiscovery) RemoveWatcher(ch chan []*KVPair)
- func (d *InprocessDiscovery) SetFilter(filter ServiceDiscoveryFilter)
- func (d InprocessDiscovery) WatchService() chan []*KVPair
- type KVPair
- type MDNSDiscovery
- func (d *MDNSDiscovery) Clone(servicePath string) ServiceDiscovery
- func (d *MDNSDiscovery) Close()
- func (d *MDNSDiscovery) GetServices() []*KVPair
- func (d *MDNSDiscovery) RemoveWatcher(ch chan []*KVPair)
- func (d *MDNSDiscovery) SetFilter(filter ServiceDiscoveryFilter)
- func (d *MDNSDiscovery) WatchService() chan []*KVPair
- type MultipleServersDiscovery
- func (d *MultipleServersDiscovery) Clone(servicePath string) ServiceDiscovery
- func (d *MultipleServersDiscovery) Close()
- func (d *MultipleServersDiscovery) GetServices() []*KVPair
- func (d *MultipleServersDiscovery) RemoveWatcher(ch chan []*KVPair)
- func (d *MultipleServersDiscovery) SetFilter(filter ServiceDiscoveryFilter)
- func (d *MultipleServersDiscovery) Update(pairs []*KVPair)
- func (d *MultipleServersDiscovery) WatchService() chan []*KVPair
- type NacosDiscovery
- func (d *NacosDiscovery) Clone(servicePath string) ServiceDiscovery
- func (d *NacosDiscovery) Close()
- func (d *NacosDiscovery) GetServices() []*KVPair
- func (d *NacosDiscovery) RemoveWatcher(ch chan []*KVPair)
- func (d *NacosDiscovery) SetFilter(filter ServiceDiscoveryFilter)
- func (d *NacosDiscovery) WatchService() chan []*KVPair
- type OneClient
- func (c *OneClient) Auth(auth string)
- func (c *OneClient) Broadcast(ctx context.Context, servicePath string, serviceMethod string, ...) error
- func (c *OneClient) Call(ctx context.Context, servicePath string, serviceMethod string, ...) error
- func (c *OneClient) Close() error
- func (c *OneClient) ConfigGeoSelector(latitude, longitude float64)
- func (c *OneClient) DownloadFile(ctx context.Context, requestFileName string, saveTo io.Writer) error
- func (c *OneClient) Fork(ctx context.Context, servicePath string, serviceMethod string, ...) error
- func (c *OneClient) GetPlugins() PluginContainer
- func (c *OneClient) Go(ctx context.Context, servicePath string, serviceMethod string, ...) (*Call, error)
- func (c *OneClient) SendFile(ctx context.Context, fileName string, rateInBytesPerSecond int64) error
- func (c *OneClient) SendRaw(ctx context.Context, r *protocol.Message) (map[string]string, []byte, error)
- func (c *OneClient) SetPlugins(plugins PluginContainer)
- func (c *OneClient) SetSelector(servicePath string, s Selector)
- type OneClientPool
- type OpenCensusPlugin
- type OpenTracingPlugin
- type Option
- type Peer2PeerDiscovery
- func (d *Peer2PeerDiscovery) Clone(servicePath string) ServiceDiscovery
- func (d *Peer2PeerDiscovery) Close()
- func (d *Peer2PeerDiscovery) GetServices() []*KVPair
- func (d *Peer2PeerDiscovery) RemoveWatcher(ch chan []*KVPair)
- func (d *Peer2PeerDiscovery) SetFilter(filter ServiceDiscoveryFilter)
- func (d *Peer2PeerDiscovery) WatchService() chan []*KVPair
- type Plugin
- type PluginContainer
- type PostCallPlugin
- type PreCallPlugin
- type RPCClient
- type RedisDiscovery
- func (d *RedisDiscovery) Clone(servicePath string) ServiceDiscovery
- func (d *RedisDiscovery) Close()
- func (d *RedisDiscovery) GetServices() []*KVPair
- func (d *RedisDiscovery) RemoveWatcher(ch chan []*KVPair)
- func (d *RedisDiscovery) SetFilter(filter ServiceDiscoveryFilter)
- func (d *RedisDiscovery) WatchService() chan []*KVPair
- type SelectMode
- type Selector
- type ServiceDiscovery
- func NewConsulDiscovery(basePath, servicePath string, consulAddr []string, options *store.Config) ServiceDiscovery
- func NewConsulDiscoveryStore(basePath string, kv store.Store) ServiceDiscovery
- func NewConsulDiscoveryTemplate(basePath string, consulAddr []string, options *store.Config) ServiceDiscovery
- func NewEtcdDiscovery(basePath string, servicePath string, etcdAddr []string, options *store.Config) ServiceDiscovery
- func NewEtcdDiscoveryStore(basePath string, kv store.Store) ServiceDiscovery
- func NewEtcdDiscoveryTemplate(basePath string, etcdAddr []string, options *store.Config) ServiceDiscovery
- func NewEtcdV3Discovery(basePath string, servicePath string, etcdAddr []string, options *store.Config) ServiceDiscovery
- func NewEtcdV3DiscoveryStore(basePath string, kv store.Store) ServiceDiscovery
- func NewEtcdV3DiscoveryTemplate(basePath string, etcdAddr []string, options *store.Config) ServiceDiscovery
- func NewInprocessDiscovery() ServiceDiscovery
- func NewMDNSDiscovery(service string, timeout time.Duration, watchInterval time.Duration, ...) ServiceDiscovery
- func NewMDNSDiscoveryTemplate(timeout time.Duration, watchInterval time.Duration, domain string) ServiceDiscovery
- func NewMultipleServersDiscovery(pairs []*KVPair) ServiceDiscovery
- func NewNacosDiscovery(servicePath string, cluster string, clientConfig constant.ClientConfig, ...) ServiceDiscovery
- func NewNacosDiscoveryTemplate(cluster string, clientConfig constant.ClientConfig, ...) ServiceDiscovery
- func NewNacosDiscoveryWithClient(servicePath string, cluster string, namingClient naming_client.INamingClient) ServiceDiscovery
- func NewPeer2PeerDiscovery(server, metadata string) ServiceDiscovery
- func NewRedisDiscovery(basePath string, servicePath string, etcdAddr []string, options *store.Config) ServiceDiscovery
- func NewRedisDiscoveryStore(basePath string, kv store.Store) ServiceDiscovery
- func NewRedisDiscoveryTemplate(basePath string, etcdAddr []string, options *store.Config) ServiceDiscovery
- func NewZookeeperDiscovery(basePath string, servicePath string, zkAddr []string, options *store.Config) ServiceDiscovery
- func NewZookeeperDiscoveryTemplate(basePath string, zkAddr []string, options *store.Config) ServiceDiscovery
- func NewZookeeperDiscoveryWithStore(basePath string, kv store.Store) ServiceDiscovery
- type ServiceDiscoveryFilter
- type ServiceError
- type Weighted
- type XClient
- type XClientPool
- type ZookeeperDiscovery
- func (d *ZookeeperDiscovery) Clone(servicePath string) ServiceDiscovery
- func (d *ZookeeperDiscovery) Close()
- func (d *ZookeeperDiscovery) GetServices() []*KVPair
- func (d *ZookeeperDiscovery) RemoveWatcher(ch chan []*KVPair)
- func (d *ZookeeperDiscovery) SetFilter(filter ServiceDiscoveryFilter)
- func (d *ZookeeperDiscovery) WatchService() chan []*KVPair
Constants ¶
const ( XVersion = "X-RPCX-Version" XMessageType = "X-RPCX-MesssageType" XHeartbeat = "X-RPCX-Heartbeat" XOneway = "X-RPCX-Oneway" XMessageStatusType = "X-RPCX-MessageStatusType" XSerializeType = "X-RPCX-SerializeType" XMessageID = "X-RPCX-MessageID" XServicePath = "X-RPCX-ServicePath" XServiceMethod = "X-RPCX-ServiceMethod" XMeta = "X-RPCX-Meta" XErrorMessage = "X-RPCX-ErrorMessage" )
const ( // ReaderBuffsize is used for bufio reader. ReaderBuffsize = 16 * 1024 // WriterBuffsize is used for bufio writer. WriterBuffsize = 16 * 1024 )
const (
FileTransferBufferSize = 1024
)
const (
Http2CallTimeout = 5
)
Variables ¶
var ( ErrBreakerOpen = errors.New("breaker open") ErrBreakerTimeout = errors.New("breaker time out") )
var ( ErrShutdown = errors.New("connection is shut down") ErrUnsupportedCodec = errors.New("unsupported codec") )
ErrShutdown connection is closed.
var ( // ErrXClientShutdown xclient is shutdown. ErrXClientShutdown = errors.New("xClient is shut down") // ErrXClientNoServer selector can't found one server. ErrXClientNoServer = errors.New("服务不可用或没有相应的服务名----can not found any server") ErrServerUnavailable = errors.New("selected server is unavilable") )
var ConnFactories = map[string]ConnFactoryFn{
"http": newDirectHTTPConn,
"kcp": newDirectKCPConn,
"quic": newDirectQuicConn,
"unix": newDirectConn,
}
var DefaultOption = Option{ Retries: 3, RPCPath: share.DefaultRPCPath, ConnectTimeout: 10 * time.Second, SerializeType: protocol.MsgPack, CompressType: protocol.None, BackupLatency: 10 * time.Millisecond, }
DefaultOption is a common option configuration for client.
var InprocessClient = &inprocessClient{ services: make(map[string]interface{}), methods: make(map[string]*reflect.Value), }
InprocessClient is a in-process client for test.
Functions ¶
func Hash ¶
Hash consistently chooses a hash bucket number in the range [0, numBuckets) for the given key. numBuckets must be >= 1.
func JumpConsistentHash ¶
JumpConsistentHash selects a server by serviceMethod and args
Types ¶
type Breaker ¶
Breaker is a CircuitBreaker interface.
var CircuitBreaker Breaker = circuit.NewRateBreaker(0.95, 100)
CircuitBreaker is a default circuit breaker (RateBreaker(0.95, 100)).
type Call ¶
type Call struct { ServicePath string // The name of the service and method to call. ServiceMethod string // The name of the service and method to call. Metadata map[string]string //metadata ResMetadata map[string]string Args interface{} // The argument to the function (*struct). Reply interface{} // The reply from the function (*struct). Error error // After completion, the error status. Done chan *Call // Strobes when call is complete. Raw bool // raw message or not }
Call represents an active RPC.
type Caller ¶
type Client ¶
type Client struct { Conn net.Conn Plugins PluginContainer ServerMessageChan chan<- *protocol.Message Http2SvcNode string // contains filtered or unexported fields }
Client represents a RPC client.
func (*Client) Call ¶
func (client *Client) Call(ctx context.Context, servicePath, serviceMethod string, args interface{}, reply interface{}) error
Call invokes the named function, waits for it to complete, and returns its error status.
func (*Client) Close ¶
Close calls the underlying connection's Close method. If the connection is already shutting down, ErrShutdown is returned.
func (*Client) Go ¶
func (client *Client) Go(ctx context.Context, servicePath, serviceMethod string, args interface{}, reply interface{}, done chan *Call) *Call
Go invokes the function asynchronously. It returns the Call structure representing the invocation. The done channel will signal when the call is complete by returning the same Call object. If done is nil, Go will allocate a new channel. If non-nil, done must be buffered or Go will deliberately crash.
func (*Client) Http2CallGw ¶
func (*Client) Http2CallSendRaw ¶
func (*Client) HttpCallOldStyle ¶
func (*Client) IsShutdown ¶
IsShutdown client is shutdown or not.
func (*Client) RegisterServerMessageChan ¶
RegisterServerMessageChan registers the channel that receives server requests.
func (*Client) SendRaw ¶
func (client *Client) SendRaw(ctx context.Context, r *protocol.Message) (map[string]string, []byte, error)
SendRaw sends raw messages. You don't care args and replys.
func (*Client) SetHttp2SvcNode ¶
func (*Client) UnregisterServerMessageChan ¶
func (client *Client) UnregisterServerMessageChan()
UnregisterServerMessageChan removes ServerMessageChan.
type ClientAfterDecodePlugin ¶
ClientAfterDecodePlugin is invoked when the message is decoded.
type ClientBeforeEncodePlugin ¶
ClientBeforeEncodePlugin is invoked when the message is encoded and sent.
type ClientConnectedPlugin ¶
ClientConnectedPlugin is invoked when the client has connected the server.
type ClientConnectionClosePlugin ¶
ClientConnectionClosePlugin is invoked when the connection is closing.
type ConnCreatedPlugin ¶
ConnCreatedPlugin is invoked when the client connection has created.
type ConsecCircuitBreaker ¶
type ConsecCircuitBreaker struct {
// contains filtered or unexported fields
}
ConsecCircuitBreaker is window sliding CircuitBreaker with failure threshold.
func NewConsecCircuitBreaker ¶
func NewConsecCircuitBreaker(failureThreshold uint64, window time.Duration) *ConsecCircuitBreaker
NewConsecCircuitBreaker returns a new ConsecCircuitBreaker.
func (*ConsecCircuitBreaker) Call ¶
func (cb *ConsecCircuitBreaker) Call(fn func() error, d time.Duration) error
Call Circuit function
func (*ConsecCircuitBreaker) Fail ¶
func (cb *ConsecCircuitBreaker) Fail()
func (*ConsecCircuitBreaker) Ready ¶
func (cb *ConsecCircuitBreaker) Ready() bool
func (*ConsecCircuitBreaker) Success ¶
func (cb *ConsecCircuitBreaker) Success()
type ConsistentAddrStrFunction ¶
type ConsistentAddrStrFunction func(options ...interface{}) string
ConsistentFunction define a hash function Return service address, like "tcp@127.0.0.1:8970"
type ConsulDiscovery ¶
type ConsulDiscovery struct { // -1 means it always retry to watch until zookeeper is ok, 0 means no retry. RetriesAfterWatchFailed int // contains filtered or unexported fields }
ConsulDiscovery is a consul service discovery. It always returns the registered servers in consul.
func (*ConsulDiscovery) Clone ¶
func (d *ConsulDiscovery) Clone(servicePath string) ServiceDiscovery
Clone clones this ServiceDiscovery with new servicePath.
func (*ConsulDiscovery) Close ¶
func (d *ConsulDiscovery) Close()
func (*ConsulDiscovery) GetServices ¶
func (d *ConsulDiscovery) GetServices() []*KVPair
GetServices returns the servers
func (*ConsulDiscovery) RemoveWatcher ¶
func (d *ConsulDiscovery) RemoveWatcher(ch chan []*KVPair)
func (*ConsulDiscovery) SetFilter ¶
func (d *ConsulDiscovery) SetFilter(filter ServiceDiscoveryFilter)
SetFilter sets the filer.
func (*ConsulDiscovery) WatchService ¶
func (d *ConsulDiscovery) WatchService() chan []*KVPair
WatchService returns a nil chan.
type EtcdDiscovery ¶
type EtcdDiscovery struct { // -1 means it always retry to watch until zookeeper is ok, 0 means no retry. RetriesAfterWatchFailed int // contains filtered or unexported fields }
EtcdDiscovery is a etcd service discovery. It always returns the registered servers in etcd.
func (*EtcdDiscovery) Clone ¶
func (d *EtcdDiscovery) Clone(servicePath string) ServiceDiscovery
Clone clones this ServiceDiscovery with new servicePath.
func (*EtcdDiscovery) Close ¶
func (d *EtcdDiscovery) Close()
func (*EtcdDiscovery) GetServices ¶
func (d *EtcdDiscovery) GetServices() []*KVPair
GetServices returns the servers
func (*EtcdDiscovery) RemoveWatcher ¶
func (d *EtcdDiscovery) RemoveWatcher(ch chan []*KVPair)
func (*EtcdDiscovery) SetFilter ¶
func (d *EtcdDiscovery) SetFilter(filter ServiceDiscoveryFilter)
SetFilter sets the filer.
func (*EtcdDiscovery) WatchService ¶
func (d *EtcdDiscovery) WatchService() chan []*KVPair
WatchService returns a nil chan.
type EtcdV3Discovery ¶
type EtcdV3Discovery struct { // -1 means it always retry to watch until zookeeper is ok, 0 means no retry. RetriesAfterWatchFailed int // contains filtered or unexported fields }
EtcdV3Discovery is a etcd service discovery. It always returns the registered servers in etcd.
func (*EtcdV3Discovery) Clone ¶
func (d *EtcdV3Discovery) Clone(servicePath string) ServiceDiscovery
Clone clones this ServiceDiscovery with new servicePath.
func (*EtcdV3Discovery) Close ¶
func (d *EtcdV3Discovery) Close()
func (*EtcdV3Discovery) GetServices ¶
func (d *EtcdV3Discovery) GetServices() []*KVPair
GetServices returns the servers
func (*EtcdV3Discovery) RemoveWatcher ¶
func (d *EtcdV3Discovery) RemoveWatcher(ch chan []*KVPair)
func (*EtcdV3Discovery) SetFilter ¶
func (d *EtcdV3Discovery) SetFilter(filter ServiceDiscoveryFilter)
SetFilter sets the filer.
func (*EtcdV3Discovery) WatchService ¶
func (d *EtcdV3Discovery) WatchService() chan []*KVPair
WatchService returns a nil chan.
type FailMode ¶
type FailMode int
FailMode decides how clients action when clients fail to invoke services
const ( // todo: iota为优雅的定义golang的常量, Failover为1, 其他常量依次递增, 比如Failfast为2 //Failover selects another server automaticaly Failover FailMode = iota //Failfast returns error immediately Failfast //Failtry use current client again Failtry //Failbackup select another server if the first server doesn't respon in specified time and use the fast response. Failbackup )
func FailModeString ¶
FailModeString retrieves an enum value from the enum constants string name. Throws an error if the param is not part of the enum.
func FailModeValues ¶
func FailModeValues() []FailMode
FailModeValues returns all values of the enum
func (FailMode) IsAFailMode ¶
IsAFailMode returns "true" if the value is listed in the enum definition. "false" otherwise
type HashServiceAndArgs ¶
HashServiceAndArgs define a hash function
type InprocessDiscovery ¶
type InprocessDiscovery struct { }
InprocessDiscovery is a in-process service discovery. Clients and servers are in one process and communicate without tcp/udp.
func (*InprocessDiscovery) Clone ¶
func (d *InprocessDiscovery) Clone(servicePath string) ServiceDiscovery
Clone clones this ServiceDiscovery with new servicePath.
func (*InprocessDiscovery) Close ¶
func (d *InprocessDiscovery) Close()
func (*InprocessDiscovery) GetServices ¶
func (d *InprocessDiscovery) GetServices() []*KVPair
GetServices returns the static server
func (InprocessDiscovery) RemoveWatcher ¶
func (d InprocessDiscovery) RemoveWatcher(ch chan []*KVPair)
func (*InprocessDiscovery) SetFilter ¶
func (d *InprocessDiscovery) SetFilter(filter ServiceDiscoveryFilter)
SetFilter sets the filer.
func (InprocessDiscovery) WatchService ¶
func (d InprocessDiscovery) WatchService() chan []*KVPair
WatchService returns a nil chan.
type MDNSDiscovery ¶
type MDNSDiscovery struct { Timeout time.Duration WatchInterval time.Duration // contains filtered or unexported fields }
MDNSDiscovery is a mdns service discovery. It always returns the registered servers in etcd.
func (*MDNSDiscovery) Clone ¶
func (d *MDNSDiscovery) Clone(servicePath string) ServiceDiscovery
Clone clones this ServiceDiscovery with new servicePath.
func (*MDNSDiscovery) Close ¶
func (d *MDNSDiscovery) Close()
func (*MDNSDiscovery) GetServices ¶
func (d *MDNSDiscovery) GetServices() []*KVPair
GetServices returns the servers
func (*MDNSDiscovery) RemoveWatcher ¶
func (d *MDNSDiscovery) RemoveWatcher(ch chan []*KVPair)
func (*MDNSDiscovery) SetFilter ¶
func (d *MDNSDiscovery) SetFilter(filter ServiceDiscoveryFilter)
SetFilter sets the filer.
func (*MDNSDiscovery) WatchService ¶
func (d *MDNSDiscovery) WatchService() chan []*KVPair
WatchService returns a nil chan.
type MultipleServersDiscovery ¶
type MultipleServersDiscovery struct {
// contains filtered or unexported fields
}
MultipleServersDiscovery is a multiple servers service discovery. It always returns the current servers and uses can change servers dynamically.
func (*MultipleServersDiscovery) Clone ¶
func (d *MultipleServersDiscovery) Clone(servicePath string) ServiceDiscovery
Clone clones this ServiceDiscovery with new servicePath.
func (*MultipleServersDiscovery) Close ¶
func (d *MultipleServersDiscovery) Close()
func (*MultipleServersDiscovery) GetServices ¶
func (d *MultipleServersDiscovery) GetServices() []*KVPair
GetServices returns the configured server
func (*MultipleServersDiscovery) RemoveWatcher ¶
func (d *MultipleServersDiscovery) RemoveWatcher(ch chan []*KVPair)
func (*MultipleServersDiscovery) SetFilter ¶
func (d *MultipleServersDiscovery) SetFilter(filter ServiceDiscoveryFilter)
SetFilter sets the filer.
func (*MultipleServersDiscovery) Update ¶
func (d *MultipleServersDiscovery) Update(pairs []*KVPair)
Update is used to update servers at runtime.
func (*MultipleServersDiscovery) WatchService ¶
func (d *MultipleServersDiscovery) WatchService() chan []*KVPair
WatchService returns a nil chan.
type NacosDiscovery ¶
type NacosDiscovery struct { // nacos client config ClientConfig constant.ClientConfig // nacos server config ServerConfig []constant.ServerConfig Cluster string RetriesAfterWatchFailed int // contains filtered or unexported fields }
NacosDiscovery is a nacos service discovery. It always returns the registered servers in nacos.
func (*NacosDiscovery) Clone ¶
func (d *NacosDiscovery) Clone(servicePath string) ServiceDiscovery
Clone clones this ServiceDiscovery with new servicePath.
func (*NacosDiscovery) Close ¶
func (d *NacosDiscovery) Close()
func (*NacosDiscovery) GetServices ¶
func (d *NacosDiscovery) GetServices() []*KVPair
GetServices returns the servers
func (*NacosDiscovery) RemoveWatcher ¶
func (d *NacosDiscovery) RemoveWatcher(ch chan []*KVPair)
func (*NacosDiscovery) SetFilter ¶
func (d *NacosDiscovery) SetFilter(filter ServiceDiscoveryFilter)
SetFilter sets the filer.
func (*NacosDiscovery) WatchService ¶
func (d *NacosDiscovery) WatchService() chan []*KVPair
WatchService returns a nil chan.
type OneClient ¶
type OneClient struct { Plugins PluginContainer // contains filtered or unexported fields }
OneClient wraps servicesPath and XClients.
func NewBidirectionalOneClient ¶
func NewBidirectionalOneClient(failMode FailMode, selectMode SelectMode, discovery ServiceDiscovery, option Option, serverMessageChan chan<- *protocol.Message) *OneClient
NewBidirectionalOneClient creates a new xclient that can receive notifications from servers.
func NewOneClient ¶
func NewOneClient(failMode FailMode, selectMode SelectMode, discovery ServiceDiscovery, option Option) *OneClient
NewOneClient creates a OneClient that supports service discovery and service governance.
func (*OneClient) Broadcast ¶
func (c *OneClient) Broadcast(ctx context.Context, servicePath string, serviceMethod string, args interface{}, reply interface{}) error
Broadcast sends requests to all servers and Success only when all servers return OK. FailMode and SelectMode are meanless for this method. Please set timeout to avoid hanging.
func (*OneClient) Call ¶
func (c *OneClient) Call(ctx context.Context, servicePath string, serviceMethod string, args interface{}, reply interface{}) error
Call invokes the named function, waits for it to complete, and returns its error status. It handles errors base on FailMode.
func (*OneClient) ConfigGeoSelector ¶
ConfigGeoSelector sets location of client's latitude and longitude, and use newGeoSelector.
func (*OneClient) DownloadFile ¶
func (*OneClient) Fork ¶
func (c *OneClient) Fork(ctx context.Context, servicePath string, serviceMethod string, args interface{}, reply interface{}) error
Fork sends requests to all servers and Success once one server returns OK. FailMode and SelectMode are meanless for this method.
func (*OneClient) GetPlugins ¶
func (c *OneClient) GetPlugins() PluginContainer
func (*OneClient) Go ¶
func (c *OneClient) Go(ctx context.Context, servicePath string, serviceMethod string, args interface{}, reply interface{}, done chan *Call) (*Call, error)
Go invokes the function asynchronously. It returns the Call structure representing the invocation. The done channel will signal when the call is complete by returning the same Call object. If done is nil, Go will allocate a new channel. If non-nil, done must be buffered or Go will deliberately crash. It does not use FailMode.
func (*OneClient) SetPlugins ¶
func (c *OneClient) SetPlugins(plugins PluginContainer)
SetPlugins sets client's plugins.
func (*OneClient) SetSelector ¶
SetSelector sets customized selector by users.
type OneClientPool ¶
type OneClientPool struct {
// contains filtered or unexported fields
}
OneClientPool is a oneclient pool with fixed size. It uses roundrobin algorithm to call its xclients. All oneclients share the same configurations such as ServiceDiscovery and serverMessageChan.
func NewBidirectionalOneClientPool ¶
func NewBidirectionalOneClientPool(count int, failMode FailMode, selectMode SelectMode, discovery ServiceDiscovery, option Option, serverMessageChan chan<- *protocol.Message) *OneClientPool
NewBidirectionalOneClientPool creates a BidirectionalOneClient pool with fixed size.
func NewOneClientPool ¶
func NewOneClientPool(count int, failMode FailMode, selectMode SelectMode, discovery ServiceDiscovery, option Option) *OneClientPool
NewOneClientPool creates a fixed size OneClient pool.
func (OneClientPool) Close ¶
func (p OneClientPool) Close()
Close this pool. Please make sure it won't be used any more.
func (*OneClientPool) Get ¶
func (p *OneClientPool) Get() *OneClient
Get returns a OneClient. It does not remove this OneClient from its cache so you don't need to put it back. Don't close this OneClient because maybe other goroutines are using this OneClient.
type Option ¶
type Option struct { // Group is used to select the services in the same group. Services set group info in their meta. // If it is empty, clients will ignore group. Group string // Retries retries to send Retries int // TLSConfig for tcp and quic TLSConfig *tls.Config // kcp.BlockCrypt Block interface{} // RPCPath for http connection RPCPath string //ConnectTimeout sets timeout for dialing ConnectTimeout time.Duration // ReadTimeout sets readdeadline for underlying net.Conns ReadTimeout time.Duration // WriteTimeout sets writedeadline for underlying net.Conns WriteTimeout time.Duration // BackupLatency is used for Failbackup mode. rpcx will sends another request if the first response doesn't return in BackupLatency time. BackupLatency time.Duration // Breaker is used to config CircuitBreaker GenBreaker func() Breaker SerializeType protocol.SerializeType CompressType protocol.CompressType Heartbeat bool HeartbeatInterval time.Duration Http2 bool Http bool }
Option contains all options for creating clients.
type Peer2PeerDiscovery ¶
type Peer2PeerDiscovery struct {
// contains filtered or unexported fields
}
Peer2PeerDiscovery is a peer-to-peer service discovery. It always returns the static server.
func (*Peer2PeerDiscovery) Clone ¶
func (d *Peer2PeerDiscovery) Clone(servicePath string) ServiceDiscovery
Clone clones this ServiceDiscovery with new servicePath.
func (*Peer2PeerDiscovery) Close ¶
func (d *Peer2PeerDiscovery) Close()
func (*Peer2PeerDiscovery) GetServices ¶
func (d *Peer2PeerDiscovery) GetServices() []*KVPair
GetServices returns the static server
func (*Peer2PeerDiscovery) RemoveWatcher ¶
func (d *Peer2PeerDiscovery) RemoveWatcher(ch chan []*KVPair)
func (*Peer2PeerDiscovery) SetFilter ¶
func (d *Peer2PeerDiscovery) SetFilter(filter ServiceDiscoveryFilter)
SetFilter sets the filer.
func (*Peer2PeerDiscovery) WatchService ¶
func (d *Peer2PeerDiscovery) WatchService() chan []*KVPair
WatchService returns a nil chan.
type PluginContainer ¶
type PluginContainer interface { Add(plugin Plugin) Remove(plugin Plugin) All() []Plugin DoConnCreated(net.Conn) (net.Conn, error) DoClientConnected(net.Conn) (net.Conn, error) DoClientConnectionClose(net.Conn) error DoPreCall(ctx context.Context, servicePath, serviceMethod string, args interface{}) error DoPostCall(ctx context.Context, servicePath, serviceMethod string, args interface{}, reply interface{}, err error) error DoClientBeforeEncode(*protocol.Message) error DoClientAfterDecode(*protocol.Message) error }
PluginContainer represents a plugin container that defines all methods to manage plugins. And it also defines all extension points.
func NewPluginContainer ¶
func NewPluginContainer() PluginContainer
type PostCallPlugin ¶
type PostCallPlugin interface {
DoPostCall(ctx context.Context, servicePath, serviceMethod string, args interface{}, reply interface{}, err error) error
}
PostCallPlugin is invoked after the client calls a server.
type PreCallPlugin ¶
type PreCallPlugin interface {
DoPreCall(ctx context.Context, servicePath, serviceMethod string, args interface{}) error
}
PreCallPlugin is invoked before the client calls a server.
type RPCClient ¶
type RPCClient interface { Connect(network, address string) error Go(ctx context.Context, servicePath, serviceMethod string, args interface{}, reply interface{}, done chan *Call) *Call Call(ctx context.Context, servicePath, serviceMethod string, args interface{}, reply interface{}) error SendRaw(ctx context.Context, r *protocol.Message) (map[string]string, []byte, error) Close() error RegisterServerMessageChan(ch chan<- *protocol.Message) UnregisterServerMessageChan() IsClosing() bool IsShutdown() bool SetHttp2SvcNode(k string) error Http2CallSendRaw(ctx context.Context, r *protocol.Message) (map[string]string, []byte, error) Http2Call(ctx context.Context, servicePath, serviceMethod string, args interface{}, reply interface{}) error HttpCall(ctx context.Context, servicePath, serviceMethod string, args interface{}, reply interface{}) error Http2CallGw(ctx context.Context, servicePath, serviceMethod string, args interface{}, reply interface{}) error }
RPCClient is interface that defines one client to call one server.
type RedisDiscovery ¶
type RedisDiscovery struct { // -1 means it always retry to watch until zookeeper is ok, 0 means no retry. RetriesAfterWatchFailed int // contains filtered or unexported fields }
RedisDiscovery is a redis service discovery. It always returns the registered servers in redis.
func (*RedisDiscovery) Clone ¶
func (d *RedisDiscovery) Clone(servicePath string) ServiceDiscovery
Clone clones this ServiceDiscovery with new servicePath.
func (*RedisDiscovery) Close ¶
func (d *RedisDiscovery) Close()
func (*RedisDiscovery) GetServices ¶
func (d *RedisDiscovery) GetServices() []*KVPair
GetServices returns the servers
func (*RedisDiscovery) RemoveWatcher ¶
func (d *RedisDiscovery) RemoveWatcher(ch chan []*KVPair)
func (*RedisDiscovery) SetFilter ¶
func (d *RedisDiscovery) SetFilter(filter ServiceDiscoveryFilter)
SetFilter sets the filer.
func (*RedisDiscovery) WatchService ¶
func (d *RedisDiscovery) WatchService() chan []*KVPair
WatchService returns a nil chan.
type SelectMode ¶
type SelectMode int
SelectMode defines the algorithm of selecting a services from candidates.
const ( //RandomSelect is selecting randomly, 随机选择 RandomSelect SelectMode = iota //RoundRobin is selecting by round robin, 轮询调度 RoundRobin //WeightedRoundRobin is selecting by weighted round robin WeightedRoundRobin //WeightedICMP is selecting by weighted Ping time WeightedICMP //ConsistentHash is selecting by hashing ConsistentHash //Closest is selecting the closest server Closest // SelectByUser is selecting by implementation of users SelectByUser = 1000 )
func SelectModeString ¶
func SelectModeString(s string) (SelectMode, error)
SelectModeString retrieves an enum value from the enum constants string name. Throws an error if the param is not part of the enum.
func SelectModeValues ¶
func SelectModeValues() []SelectMode
SelectModeValues returns all values of the enum
func (SelectMode) IsASelectMode ¶
func (i SelectMode) IsASelectMode() bool
IsASelectMode returns "true" if the value is listed in the enum definition. "false" otherwise
func (SelectMode) String ¶
func (i SelectMode) String() string
type Selector ¶
type Selector interface { Select(ctx context.Context, servicePath, serviceMethod string, args interface{}) string UpdateServer(servers map[string]string) }
Selector defines selector that selects one service from candidates.
type ServiceDiscovery ¶
type ServiceDiscovery interface { // todo: 每种服务注册的方式都要继承这个interface的方法 GetServices() []*KVPair WatchService() chan []*KVPair RemoveWatcher(ch chan []*KVPair) Clone(servicePath string) ServiceDiscovery SetFilter(ServiceDiscoveryFilter) Close() }
ServiceDiscovery defines ServiceDiscovery of zookeeper, etcd and consul
func NewConsulDiscovery ¶
func NewConsulDiscovery(basePath, servicePath string, consulAddr []string, options *store.Config) ServiceDiscovery
NewConsulDiscovery returns a new ConsulDiscovery.
func NewConsulDiscoveryStore ¶
func NewConsulDiscoveryStore(basePath string, kv store.Store) ServiceDiscovery
NewConsulDiscoveryStore returns a new ConsulDiscovery with specified store.
func NewConsulDiscoveryTemplate ¶
func NewConsulDiscoveryTemplate(basePath string, consulAddr []string, options *store.Config) ServiceDiscovery
NewConsulDiscoveryTemplate returns a new ConsulDiscovery template.
func NewEtcdDiscovery ¶
func NewEtcdDiscovery(basePath string, servicePath string, etcdAddr []string, options *store.Config) ServiceDiscovery
NewEtcdDiscovery returns a new EtcdDiscovery.
func NewEtcdDiscoveryStore ¶
func NewEtcdDiscoveryStore(basePath string, kv store.Store) ServiceDiscovery
NewEtcdDiscoveryStore return a new EtcdDiscovery with specified store.
func NewEtcdDiscoveryTemplate ¶
func NewEtcdDiscoveryTemplate(basePath string, etcdAddr []string, options *store.Config) ServiceDiscovery
NewEtcdDiscoveryTemplate returns a new EtcdDiscovery template.
func NewEtcdV3Discovery ¶
func NewEtcdV3Discovery(basePath string, servicePath string, etcdAddr []string, options *store.Config) ServiceDiscovery
NewEtcdV3Discovery returns a new EtcdV3Discovery.
func NewEtcdV3DiscoveryStore ¶
func NewEtcdV3DiscoveryStore(basePath string, kv store.Store) ServiceDiscovery
NewEtcdV3DiscoveryStore return a new EtcdV3Discovery with specified store.
func NewEtcdV3DiscoveryTemplate ¶
func NewEtcdV3DiscoveryTemplate(basePath string, etcdAddr []string, options *store.Config) ServiceDiscovery
NewEtcdV3DiscoveryTemplate returns a new EtcdV3Discovery template.
func NewInprocessDiscovery ¶
func NewInprocessDiscovery() ServiceDiscovery
NewInprocessDiscovery returns a new InprocessDiscovery.
func NewMDNSDiscovery ¶
func NewMDNSDiscovery(service string, timeout time.Duration, watchInterval time.Duration, domain string) ServiceDiscovery
NewMDNSDiscovery returns a new MDNSDiscovery. If domain is empty, use "local." in default.
func NewMDNSDiscoveryTemplate ¶
func NewMDNSDiscoveryTemplate(timeout time.Duration, watchInterval time.Duration, domain string) ServiceDiscovery
NewMDNSDiscoveryTemplate returns a new MDNSDiscovery template.
func NewMultipleServersDiscovery ¶
func NewMultipleServersDiscovery(pairs []*KVPair) ServiceDiscovery
NewMultipleServersDiscovery returns a new MultipleServersDiscovery.
func NewNacosDiscovery ¶
func NewNacosDiscovery(servicePath string, cluster string, clientConfig constant.ClientConfig, serverConfig []constant.ServerConfig) ServiceDiscovery
NewNacosDiscovery returns a new NacosDiscovery.
func NewNacosDiscoveryTemplate ¶
func NewNacosDiscoveryTemplate(cluster string, clientConfig constant.ClientConfig, serverConfig []constant.ServerConfig) ServiceDiscovery
NewNacosDiscoveryTemplate returns a new NacosDiscovery template.
func NewNacosDiscoveryWithClient ¶
func NewNacosDiscoveryWithClient(servicePath string, cluster string, namingClient naming_client.INamingClient) ServiceDiscovery
func NewPeer2PeerDiscovery ¶
func NewPeer2PeerDiscovery(server, metadata string) ServiceDiscovery
NewPeer2PeerDiscovery returns a new Peer2PeerDiscovery.
func NewRedisDiscovery ¶
func NewRedisDiscovery(basePath string, servicePath string, etcdAddr []string, options *store.Config) ServiceDiscovery
NewRedisDiscovery returns a new RedisDiscovery.
func NewRedisDiscoveryStore ¶
func NewRedisDiscoveryStore(basePath string, kv store.Store) ServiceDiscovery
NewRedisDiscoveryStore return a new RedisDiscovery with specified store.
func NewRedisDiscoveryTemplate ¶
func NewRedisDiscoveryTemplate(basePath string, etcdAddr []string, options *store.Config) ServiceDiscovery
NewRedisDiscoveryTemplate returns a new RedisDiscovery template.
func NewZookeeperDiscovery ¶
func NewZookeeperDiscovery(basePath string, servicePath string, zkAddr []string, options *store.Config) ServiceDiscovery
NewZookeeperDiscovery returns a new ZookeeperDiscovery.
func NewZookeeperDiscoveryTemplate ¶
func NewZookeeperDiscoveryTemplate(basePath string, zkAddr []string, options *store.Config) ServiceDiscovery
NewZookeeperDiscoveryTemplate returns a new ZookeeperDiscovery template.
func NewZookeeperDiscoveryWithStore ¶
func NewZookeeperDiscoveryWithStore(basePath string, kv store.Store) ServiceDiscovery
NewZookeeperDiscoveryWithStore returns a new ZookeeperDiscovery with specified store.
type ServiceDiscoveryFilter ¶
ServiceDiscoveryFilter can be used to filter services with customized logics. Servers can register its services but clients can use the customized filter to select some services. It returns true if ServiceDiscovery wants to use this service, otherwise it returns false.
type ServiceError ¶
type ServiceError string
ServiceError is an error from server.
func (ServiceError) Error ¶
func (e ServiceError) Error() string
type XClient ¶
type XClient interface { SetPlugins(plugins PluginContainer) GetPlugins() PluginContainer SetSelector(s Selector) ConfigGeoSelector(latitude, longitude float64) Auth(auth string) Go(ctx context.Context, serviceMethod string, args interface{}, reply interface{}, done chan *Call) (*Call, error) // todo: the call we just check the protocol, not the framework name! Call(ctx context.Context, serviceMethod string, args interface{}, reply interface{}) error CallNotGo(svc string, md string, pairs []*KVPair) string Broadcast(ctx context.Context, serviceMethod string, args interface{}, reply interface{}) error Fork(ctx context.Context, serviceMethod string, args interface{}, reply interface{}) error SendRaw(ctx context.Context, r *protocol.Message) (map[string]string, []byte, error) SendFile(ctx context.Context, fileName string, rateInBytesPerSecond int64) error DownloadFile(ctx context.Context, requestFileName string, saveTo io.Writer) error Close() error // 非go语言 IsGo() bool GetNotGoServers() map[string]string GetSvcTyp() string GetReverseProxy() bool SelectNode(ctx context.Context, servicePath, serviceMethod string, args interface{}) string }
XClient is an interface that used by client with service discovery and service governance. One XClient is used only for one service. You should create multiple XClient for multiple services.
func NewBidirectionalXClient ¶
func NewBidirectionalXClient(servicePath string, failMode FailMode, selectMode SelectMode, discovery ServiceDiscovery, option Option, serverMessageChan chan<- *protocol.Message) XClient
NewBidirectionalXClient creates a new xclient that can receive notifications from servers.
func NewXClient ¶
func NewXClient(servicePath string, failMode FailMode, selectMode SelectMode, discovery ServiceDiscovery, option Option) XClient
NewXClient creates a XClient that supports service discovery and service governance.
type XClientPool ¶
type XClientPool struct {
// contains filtered or unexported fields
}
XClientPool is a xclient pool with fixed size. It uses roundrobin algorithm to call its xclients. All xclients share the same configurations such as ServiceDiscovery and serverMessageChan.
func NewBidirectionalXClientPool ¶
func NewBidirectionalXClientPool(count int, servicePath string, failMode FailMode, selectMode SelectMode, discovery ServiceDiscovery, option Option, serverMessageChan chan<- *protocol.Message) *XClientPool
NewBidirectionalXClientPool creates a BidirectionalXClient pool with fixed size.
func NewXClientPool ¶
func NewXClientPool(count int, servicePath string, failMode FailMode, selectMode SelectMode, discovery ServiceDiscovery, option Option) *XClientPool
NewXClientPool creates a fixed size XClient pool.
func (*XClientPool) Close ¶
func (p *XClientPool) Close()
Close this pool. Please make sure it won't be used any more.
func (*XClientPool) Get ¶
func (p *XClientPool) Get() XClient
Get returns a xclient. It does not remove this xclient from its cache so you don't need to put it back. Don't close this xclient because maybe other goroutines are using this xclient.
type ZookeeperDiscovery ¶
type ZookeeperDiscovery struct { // -1 means it always retry to watch until zookeeper is ok, 0 means no retry. RetriesAfterWatchFailed int // contains filtered or unexported fields }
ZookeeperDiscovery is a zoopkeer service discovery. It always returns the registered servers in zookeeper.
func (*ZookeeperDiscovery) Clone ¶
func (d *ZookeeperDiscovery) Clone(servicePath string) ServiceDiscovery
Clone clones this ServiceDiscovery with new servicePath.
func (*ZookeeperDiscovery) Close ¶
func (d *ZookeeperDiscovery) Close()
func (*ZookeeperDiscovery) GetServices ¶
func (d *ZookeeperDiscovery) GetServices() []*KVPair
GetServices returns the servers
func (*ZookeeperDiscovery) RemoveWatcher ¶
func (d *ZookeeperDiscovery) RemoveWatcher(ch chan []*KVPair)
func (*ZookeeperDiscovery) SetFilter ¶
func (d *ZookeeperDiscovery) SetFilter(filter ServiceDiscoveryFilter)
SetFilter sets the filer.
func (*ZookeeperDiscovery) WatchService ¶
func (d *ZookeeperDiscovery) WatchService() chan []*KVPair
WatchService returns a nil chan.
Source Files ¶
- caller.go
- caller_cakerabbit.go
- caller_python.go
- caller_rust.go
- circuit_breaker.go
- client.go
- connection.go
- connection_nonkcp.go
- connection_nonquic.go
- const.go
- consul_discovery.go
- etcd_discovery.go
- etcdv3_discovery.go
- failmode_enumer.go
- geo_utils.go
- hash_utils.go
- inprocess_client.go
- inprocess_discovery.go
- mdns_discovery.go
- mode.go
- multiple_servers_discovery.go
- nacos_discovery.go
- oneclient.go
- oneclient_pool.go
- opencensus.go
- opentracing.go
- peer2peer_discovery.go
- ping_excluded.go
- plugin.go
- redis_discovery.go
- selectmode_enumer.go
- selector.go
- smooth-weighted-round-robin.go
- xclient.go
- xclient_pool.go
- zookeeper_discovery.go