micro/client/client.go

132 lines
4.2 KiB
Go
Raw Normal View History

2016-12-14 15:41:48 +00:00
// Package client is an interface for an RPC client
package client // import "go.unistack.org/micro/v3/client"
2015-01-13 23:31:27 +00:00
2015-05-21 19:24:57 +01:00
import (
2018-03-03 11:53:52 +00:00
"context"
2016-01-03 21:14:33 +00:00
"time"
2019-01-10 11:39:39 +00:00
"go.unistack.org/micro/v3/codec"
"go.unistack.org/micro/v3/metadata"
2015-05-21 19:24:57 +01:00
)
var (
// DefaultClient is the global default client
DefaultClient = NewClient()
// DefaultContentType is the default content-type if not specified
DefaultContentType = ""
// DefaultBackoff is the default backoff function for retries (minimum 10 millisecond and maximum 5 second)
DefaultBackoff = BackoffInterval(10*time.Millisecond, 5*time.Second)
// DefaultRetry is the default check-for-retry function for retries
DefaultRetry = RetryNever
// DefaultRetries is the default number of times a request is tried
DefaultRetries = 0
// DefaultRequestTimeout is the default request timeout
DefaultRequestTimeout = time.Second * 5
// DefaultPoolSize sets the connection pool size
DefaultPoolSize = 100
// DefaultPoolTTL sets the connection pool ttl
DefaultPoolTTL = time.Minute
)
2016-01-30 21:15:08 +00:00
// Client is the interface used to make requests to services.
// It supports Request/Response via Transport and Publishing via the Broker.
2019-07-22 15:41:14 +08:00
// It also supports bidirectional streaming of requests.
2015-01-13 23:31:27 +00:00
type Client interface {
Name() string
Init(opts ...Option) error
2016-01-02 19:12:17 +00:00
Options() Options
2018-05-10 17:33:54 +01:00
NewMessage(topic string, msg interface{}, opts ...MessageOption) Message
NewRequest(service string, endpoint string, req interface{}, opts ...RequestOption) Request
2015-12-08 19:25:42 +00:00
Call(ctx context.Context, req Request, rsp interface{}, opts ...CallOption) error
2018-04-14 18:15:09 +01:00
Stream(ctx context.Context, req Request, opts ...CallOption) (Stream, error)
2018-04-14 18:06:52 +01:00
Publish(ctx context.Context, msg Message, opts ...PublishOption) error
BatchPublish(ctx context.Context, msg []Message, opts ...PublishOption) error
2015-12-19 21:56:14 +00:00
String() string
}
type (
FuncCall func(ctx context.Context, req Request, rsp interface{}, opts ...CallOption) error
HookCall func(next FuncCall) FuncCall
FuncStream func(ctx context.Context, req Request, opts ...CallOption) (Stream, error)
HookStream func(next FuncStream) FuncStream
FuncPublish func(ctx context.Context, msg Message, opts ...PublishOption) error
HookPublish func(next FuncPublish) FuncPublish
FuncBatchPublish func(ctx context.Context, msg []Message, opts ...PublishOption) error
HookBatchPublish func(next FuncBatchPublish) FuncBatchPublish
)
2018-04-14 18:06:52 +01:00
// Message is the interface for publishing asynchronously
type Message interface {
Topic() string
2018-04-14 18:06:52 +01:00
Payload() interface{}
ContentType() string
Metadata() metadata.Metadata
}
2016-04-06 17:53:16 +01:00
// Request is the interface for a synchronous request used by Call or Stream
type Request interface {
2019-01-10 11:39:39 +00:00
// The service to call
Service() string
2019-01-18 10:12:57 +00:00
// The action to take
Method() string
// The endpoint to invoke
2019-01-10 21:25:31 +00:00
Endpoint() string
2019-01-10 11:39:39 +00:00
// The content type
ContentType() string
2019-01-10 11:39:39 +00:00
// The unencoded request body
Body() interface{}
// Write to the encoded request writer. This is nil before a call is made
Codec() codec.Codec
2015-12-17 20:37:35 +00:00
// indicates whether the request will be a streaming one rather than unary
Stream() bool
}
2019-01-10 11:39:39 +00:00
// Response is the response received from a service
type Response interface {
// Read the response
Codec() codec.Codec
// Header data
Header() metadata.Metadata
2019-01-10 11:39:39 +00:00
// Read the undecoded response
Read() ([]byte, error)
}
// Stream is the interface for a bidirectional synchronous stream
2018-04-14 18:15:09 +01:00
type Stream interface {
2019-01-14 21:30:43 +00:00
// Context for the stream
2015-12-17 20:37:35 +00:00
Context() context.Context
2019-01-14 21:30:43 +00:00
// The request made
Request() Request
2019-01-14 21:30:43 +00:00
// The response read
Response() Response
// Send will encode and send a request
Send(msg interface{}) error
2019-01-14 21:30:43 +00:00
// Recv will decode and read a response
Recv(msg interface{}) error
// SendMsg will encode and send a request
SendMsg(msg interface{}) error
// RecvMsg will decode and read a response
RecvMsg(msg interface{}) error
2019-01-14 21:30:43 +00:00
// Error returns the stream error
Error() error
2019-01-14 21:30:43 +00:00
// Close closes the stream
Close() error
// CloseSend closes the send direction of the stream
CloseSend() error
2015-01-13 23:31:27 +00:00
}
2016-04-06 17:53:16 +01:00
// Option used by the Client
type Option func(*Options)
2016-04-06 17:53:16 +01:00
// CallOption used by Call or Stream
type CallOption func(*CallOptions)
2016-04-06 17:53:16 +01:00
// PublishOption used by Publish
type PublishOption func(*PublishOptions)
2016-04-06 17:53:16 +01:00
2018-05-10 17:33:54 +01:00
// MessageOption used by NewMessage
type MessageOption func(*MessageOptions)
2016-04-06 17:53:16 +01:00
// RequestOption used by NewRequest
type RequestOption func(*RequestOptions)