micro/network/link/link.go

62 lines
1.7 KiB
Go
Raw Normal View History

2019-07-10 21:09:22 +03:00
// Package link provides a measured link on top of a transport.Socket
package link
import (
"errors"
"github.com/micro/go-micro/config/options"
"github.com/micro/go-micro/transport"
)
var (
// ErrLinkClosed is returned when attempting i/o operation on the closed link
ErrLinkClosed = errors.New("link closed")
)
2019-07-10 21:09:22 +03:00
// Link is a layer on top of a transport socket with the
// buffering send and recv queues with the ability to
2019-07-10 21:09:22 +03:00
// measure the actual transport link and reconnect if
// an address is specified.
type Link interface {
// provides the transport.Socket interface
transport.Socket
2019-07-10 21:07:18 +03:00
// Connect connects the link. It must be called first
// if there's an expectation to create a new socket.
Connect() error
2019-07-10 19:43:36 +03:00
// Id of the link is "local" if not specified
Id() string
// Status of the link
Status() string
// Depth of the buffers
Weight() int
// Rate of the link
Length() int
}
// NewLink creates a new link on top of a socket
func NewLink(opts ...options.Option) Link {
return newLink(options.NewOptions(opts...))
}
2019-07-10 21:09:22 +03:00
// Sets the link id which otherwise defaults to "local"
func Id(id string) options.Option {
return options.WithValue("link.id", id)
}
2019-07-10 21:07:18 +03:00
// The address to use for the link. Connect must be
2019-07-10 21:09:22 +03:00
// called for this to be used, its otherwise unused.
func Address(a string) options.Option {
return options.WithValue("link.address", a)
}
2019-07-10 21:07:18 +03:00
// The transport to use for the link where we
// want to dial the connection first.
func Transport(t transport.Transport) options.Option {
return options.WithValue("link.transport", t)
}
2019-07-10 21:07:18 +03:00
2019-07-10 21:09:22 +03:00
// Socket sets the socket to use instead of dialing.
2019-07-10 21:07:18 +03:00
func Socket(s transport.Socket) options.Option {
return options.WithValue("link.socket", s)
}