nats

package
v1.7.1 Latest Latest
Warning

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

Go to latest
Published: Jun 17, 2021 License: MIT Imports: 18 Imported by: 0

Documentation

Index

Constants

View Source
const (
	ErrorParamsEmpty liberr.CodeError = iota + liberr.MinPkgNutsDB
	ErrorParamsMissing
	ErrorParamsMismatching
	ErrorParamsInvalid
	ErrorParamsInvalidNumber
	ErrorConfigValidation
	ErrorConfigInvalidJWTOperator
	ErrorConfigInvalidAccount
	ErrorConfigInvalidAllowedConnectionType
	ErrorConfigInvalidFilePath
	ErrorConfigJsonMarshall
	ErrorConfigWriteInFile
	ErrorClientConnect
	ErrorClientClusterConnect
	ErrorServerStart
)
View Source
const (
	DefaultWaitReady = 50 * time.Millisecond
	DefaultTickReady = 5 * DefaultWaitReady
)

Variables

This section is empty.

Functions

func IsCodeError

func IsCodeError() bool

Types

type Client

type Client struct {

	// Url represents a single NATS server url to which the client
	// will be connecting. If the Servers option is also set, it
	// then becomes the first server in the Servers array.
	Url string

	// Servers is a configured set of servers which this client
	// will use when attempting to connect.
	Servers []string

	// NoRandomize configures whether we will randomize the
	// server pool.
	NoRandomize bool

	// NoEcho configures whether the server will echo back messages
	// that are sent on this connection if we also have matching subscriptions.
	// Note this is supported on servers >= version 1.2. Proto 1 or greater.
	NoEcho bool

	// Name is an optional name label which will be sent to the server
	// on CONNECT to identify the client.
	Name string

	// Verbose signals the server to send an OK ack for commands
	// successfully processed by the server.
	Verbose bool

	// Pedantic signals the server whether it should be doing further
	// validation of subjects.
	Pedantic bool

	// AllowReconnect enables reconnection logic to be used when we
	// encounter a disconnect from the current server.
	AllowReconnect bool

	// MaxReconnect sets the number of reconnect attempts that will be
	// tried before giving up. If negative, then it will never give up
	// trying to reconnect.
	MaxReconnect int

	// ReconnectWait sets the time to backoff after attempting a reconnect
	// to a server that we were already connected to previously.
	ReconnectWait time.Duration

	// ReconnectJitter sets the upper bound for a random delay added to
	// ReconnectWait during a reconnect when no TLS is used.
	// Note that any jitter is capped with ReconnectJitterMax.
	ReconnectJitter time.Duration

	// ReconnectJitterTLS sets the upper bound for a random delay added to
	// ReconnectWait during a reconnect when TLS is used.
	// Note that any jitter is capped with ReconnectJitterMax.
	ReconnectJitterTLS time.Duration

	// Timeout sets the timeout for a Dial operation on a connection.
	Timeout time.Duration

	// DrainTimeout sets the timeout for a Drain Operation to complete.
	DrainTimeout time.Duration

	// FlusherTimeout is the maximum time to wait for write operations
	// to the underlying connection to complete (including the flusher loop).
	FlusherTimeout time.Duration

	// PingInterval is the period at which the client will be sending ping
	// commands to the server, disabled if 0 or negative.
	PingInterval time.Duration

	// MaxPingsOut is the maximum number of pending ping commands that can
	// be awaiting a response before raising an ErrStaleConnection error.
	MaxPingsOut int

	// ReconnectBufSize is the size of the backing bufio during reconnect.
	// Once this has been exhausted publish operations will return an error.
	ReconnectBufSize int

	// SubChanLen is the size of the buffered channel used between the socket
	// Go routine and the message delivery for SyncSubscriptions.
	// NOTE: This does not affect AsyncSubscriptions which are
	// dictated by PendingLimits()
	SubChanLen int

	// User sets the username to be used when connecting to the server.
	User string

	// Password sets the password to be used when connecting to a server.
	Password string

	// Token sets the token to be used when connecting to a server.
	Token string

	// UseOldRequestStyle forces the old method of Requests that utilize
	// a new Inbox and a new Subscription for each request.
	UseOldRequestStyle bool

	// NoCallbacksAfterClientClose allows preventing the invocation of
	// callbacks after Close() is called. Client won't receive notifications
	// when Close is invoked by user code. Default is to invoke the callbacks.
	NoCallbacksAfterClientClose bool

	// Secure enables TLS secure connections that skip server
	// verification by default. NOT RECOMMENDED.
	Secure bool

	// TLSConfig is a custom TLS configuration to use for secure
	// transports.
	TLSConfig libtls.Config
}

func (Client) NewClient

func (c Client) NewClient(defTls libtls.TLSConfig) (*natcli.Conn, liberr.Error)

func (Client) Validate

func (c Client) Validate() liberr.Error

type Config

type Config struct {
	Server     ConfigSrv       `mapstructure:"server" json:"server" yaml:"server" toml:"server" validate:"dive,required"`
	Cluster    ConfigCluster   `mapstructure:"cluster" json:"cluster" yaml:"cluster" toml:"cluster" validate:"dive,required"`
	Gateways   ConfigGateway   `mapstructure:"gateways" json:"gateways" yaml:"gateways" toml:"gateways" validate:"dive,required"`
	Leaf       ConfigLeaf      `mapstructure:"leaf" json:"leaf" yaml:"leaf" toml:"leaf" validate:"dive,required"`
	Websockets ConfigWebsocket `mapstructure:"websockets" json:"websockets" yaml:"websockets" toml:"websockets" validate:"dive,required"`
	MQTT       ConfigMQTT      `mapstructure:"mqtt" json:"mqtt" yaml:"mqtt" toml:"mqtt" validate:"dive,required"`
	Limits     ConfigLimits    `mapstructure:"limits" json:"limits" yaml:"limits" toml:"limits" validate:"dive,required"`
	Logs       ConfigLogger    `mapstructure:"logs" json:"logs" yaml:"logs" toml:"logs" validate:"dive,required"`
	Auth       ConfigAuth      `mapstructure:"auth" json:"auth" yaml:"auth" toml:"auth" validate:"dive,required"`

	//function / interface are not defined in config marshall
	Customs *ConfigCustom `mapstructure:"-" json:"-" yaml:"-" toml:"-"`
}

func (Config) LogConfigJson

func (c Config) LogConfigJson() liberr.Error

func (Config) NatsOption

func (c Config) NatsOption(defaultTls libtls.TLSConfig) (*natsrv.Options, liberr.Error)

func (Config) Validate

func (c Config) Validate() liberr.Error

type ConfigAccount

type ConfigAccount struct {
	//Name define the name of the account.
	Name string `mapstructure:"name" json:"name" yaml:"name" toml:"name"`

	Permission ConfigPermissionsUser `mapstructure:"permission" json:"permission" yaml:"permission" toml:"permission" validate:"dive,required"`
}

ConfigAccount are subject namespace definitions. By default no messages are shared between accounts. You can share via Exports and Imports of Streams and Services.

type ConfigAuth

type ConfigAuth struct {
	//NKeys Set the nkeys list with account.
	NKeys []ConfigNkey `mapstructure:"nkeys" json:"nkeys" yaml:"nkeys" toml:"nkeys" validate:"dive"`

	//Users Set the users list with account.
	Users []ConfigUser `mapstructure:"users" json:"users" yaml:"users" toml:"users" validate:"dive"`

	//Account Set the account list with permissions.
	Accounts []ConfigAccount `mapstructure:"accounts" json:"accounts" yaml:"accounts" toml:"accounts" validate:"dive"`

	//AuthTimeout define the timeout for authentication process.
	AuthTimeout time.Duration `mapstructure:"auth_timeout" json:"auth_timeout" yaml:"auth_timeout" toml:"auth_timeout"`

	//NoAuthUser allows you to refer to a configured user/account when no credentials are provided.
	NoAuthUser string `mapstructure:"no_auth_user" json:"no_auth_user" yaml:"no_auth_user" toml:"no_auth_user"`

	//SystemAccount define the account under which nats-server offer services.
	SystemAccount string `mapstructure:"system_account" json:"system_account" yaml:"system_account" toml:"system_account"`

	//NoSystemAccount disable the system account.
	NoSystemAccount bool `mapstructure:"no_system_account" json:"no_system_account" yaml:"no_system_account" toml:"no_system_account"`

	//AllowNewAccounts define whether or not new accounts can be created on the fly.
	AllowNewAccounts bool `mapstructure:"allow_new_accounts" json:"allow_new_accounts" yaml:"allow_new_accounts" toml:"allow_new_accounts"`

	//TrustedKeys define the list of trusted keys allowed to operate the server
	TrustedKeys []string `mapstructure:"trusted_keys" json:"trusted_keys" yaml:"trusted_keys" toml:"trusted_keys"`

	//TrustedOperators define a list of jwt file for operator claim.
	TrustedOperators []string `mapstructure:"trusted_operators" json:"trusted_operators" yaml:"trusted_operators" toml:"trusted_operators"`
}

type ConfigCluster

type ConfigCluster struct {
	//Name define the name of the cluster.
	Name string `mapstructure:"name" json:"name" yaml:"name" toml:"name"`

	//Host define the network host to cluster listen on.
	Host string `mapstructure:"host" json:"host" yaml:"host" toml:"host"`

	//Port define the network port to cluster listen on.
	Port int `mapstructure:"port" json:"port" yaml:"port" toml:"port"`

	//ListenStr define the cluster url from which members can solicit routes.
	ListenStr string `mapstructure:"listen_str" json:"listen_str" yaml:"listen_str" toml:"listen_str"`

	//Advertise define the cluster URL to advertise to other servers.
	Advertise string `mapstructure:"advertise" json:"advertise" yaml:"advertise" toml:"advertise"`

	//NoAdvertise specify if Advertise known cluster IPs to clients.
	NoAdvertise bool `mapstructure:"no_advertise" json:"no_advertise" yaml:"no_advertise" toml:"no_advertise"`

	//ConnectRetries define the number of connect retries for implicit routes.
	ConnectRetries int `mapstructure:"connect_retries" json:"connect_retries" yaml:"connect_retries" toml:"connect_retries"`

	//Username is the username used for cluster connection.
	Username string `mapstructure:"username" json:"username" yaml:"username" toml:"username"`

	//Password define the password used for cluster connection.
	Password string `mapstructure:"password" json:"password" yaml:"password" toml:"password"`

	//AuthTimeout define the timeout for authentication process.
	AuthTimeout time.Duration `mapstructure:"auth_timeout" json:"auth_timeout" yaml:"auth_timeout" toml:"auth_timeout"`

	//Permissions define the scope permission assign to route connections.
	Permissions ConfigPermissionsRoute `mapstructure:"permissions" json:"permissions" yaml:"permissions" toml:"permissions" validate:"dive"`

	//TLS Enable tls for cluster connection.
	TLS bool `mapstructure:"tls" json:"tls" yaml:"tls" toml:"tls"`

	//TLSTimeout define the timeout for tls handshake for cluster connection.
	TLSTimeout time.Duration `mapstructure:"tls_timeout" json:"tls_timeout" yaml:"tls_timeout" toml:"tls_timeout"`

	//TLSConfig define the tls configuration for cluster connection.
	TLSConfig libtls.Config `mapstructure:"tls_config" json:"tls_config" yaml:"tls_config" toml:"tls_config" validate:"dive"`
}

type ConfigCustom

type ConfigCustom struct {
	AccountResolver            natsrv.AccountResolver `mapstructure:"-" json:"-" yaml:"-" toml:"-"`
	AccountResolverTLS         bool                   `mapstructure:"-" json:"-" yaml:"-" toml:"-"`
	AccountResolverTLSConfig   libtls.Config          `mapstructure:"-" json:"-" yaml:"-" toml:"-"`
	CustomClientAuthentication natsrv.Authentication  `mapstructure:"-" json:"-" yaml:"-" toml:"-"`
	CustomRouterAuthentication natsrv.Authentication  `mapstructure:"-" json:"-" yaml:"-" toml:"-"`
}

type ConfigGateway

type ConfigGateway struct {
	//Name define the name of the gateway.
	Name string `mapstructure:"name" json:"name" yaml:"name" toml:"name"`

	//Host define the network host to listen on.
	Host string `mapstructure:"host" json:"host" yaml:"host" toml:"host"`

	//Port define the network port to listen on.
	Port int `mapstructure:"port" json:"port" yaml:"port" toml:"port"`

	//Username is the username used for gateways connection.
	Username string `mapstructure:"username" json:"username" yaml:"username" toml:"username"`

	//Password define the password used for gateways connection.
	Password string `mapstructure:"password" json:"password" yaml:"password" toml:"password"`

	//AuthTimeout define the timeout for authentication process.
	AuthTimeout time.Duration `mapstructure:"auth_timeout" json:"auth_timeout" yaml:"auth_timeout" toml:"auth_timeout"`

	//Advertise define the gateway URL to advertise to other servers.
	Advertise string `mapstructure:"advertise" json:"advertise" yaml:"advertise" toml:"advertise"`

	//ConnectRetries define the number of connect retries for implicit routes.
	ConnectRetries int `mapstructure:"connect_retries" json:"connect_retries" yaml:"connect_retries" toml:"connect_retries"`

	//Gateways define a list of route for gateways.
	Gateways []*ConfigGatewayRemote `mapstructure:"gateways" json:"gateways" yaml:"gateways" toml:"gateways" validate:"dive"`

	//RejectUnknown allow to reject unknown cluster connection.
	RejectUnknown bool `mapstructure:"reject_unknown" json:"reject_unknown" yaml:"reject_unknown" toml:"reject_unknown"`

	//TLS Enable tls for gateways connection.
	TLS bool `mapstructure:"tls" json:"tls" yaml:"tls" toml:"tls"`

	//TLSTimeout define the timeout for tls handshake for gateways connection.
	TLSTimeout time.Duration `mapstructure:"tls_timeout" json:"tls_timeout" yaml:"tls_timeout" toml:"tls_timeout"`

	//TLSConfig define the tls configuration for gateways connection.
	TLSConfig libtls.Config `mapstructure:"tls_config" json:"tls_config" yaml:"tls_config" toml:"tls_config" validate:"dive"`
}

ConfigGateway are options for gateways. NOTE: This structure is no longer used for monitoring endpoints and json tags are deprecated and may be removed in the future.

type ConfigGatewayRemote

type ConfigGatewayRemote struct {
	//Name define the name of the current gateways destination.
	Name string `mapstructure:"name" json:"name" yaml:"name" toml:"name"`

	//URLs define a list of route for the current gateways destination.
	URLs []*url.URL `mapstructure:"urls" json:"urls" yaml:"urls" toml:"urls" validate:"dive"`

	//TLS Enable tls for the current gateways destination.
	TLS bool `mapstructure:"tls" json:"tls" yaml:"tls" toml:"tls"`

	//TLSTimeout define the timeout for tls handshake for the current gateways destination.
	TLSTimeout time.Duration `mapstructure:"tls_timeout" json:"tls_timeout" yaml:"tls_timeout" toml:"tls_timeout"`

	//TLSConfig define the tls configuration for the current gateways destination.
	TLSConfig libtls.Config `mapstructure:"tls_config" json:"tls_config" yaml:"tls_config" toml:"tls_config" validate:"dive"`
}

ConfigGatewayRemote are options for connecting to a remote gateway NOTE: This structure is no longer used for monitoring endpoints and json tags are deprecated and may be removed in the future.

type ConfigLeaf

type ConfigLeaf struct {
	//Host define the network host to listen on.
	Host string `mapstructure:"host" json:"host" yaml:"host" toml:"host"`

	//Port define the network port to listen on.
	Port int `mapstructure:"port" json:"port" yaml:"port" toml:"port"`

	//Username is the username used for leaf connection.
	Username string `mapstructure:"username" json:"username" yaml:"username" toml:"username"`

	//Password define the password used for leaf connection.
	Password string `mapstructure:"password" json:"password" yaml:"password" toml:"password"`

	//AuthTimeout define the timeout for authentication process.
	AuthTimeout time.Duration `mapstructure:"auth_timeout" json:"auth_timeout" yaml:"auth_timeout" toml:"auth_timeout"`

	//Advertise define the gateway URL to advertise to other servers.
	Advertise string `mapstructure:"advertise" json:"advertise" yaml:"advertise" toml:"advertise"`

	//NoAdvertise specify if Advertise known leaf node IPs to clients.
	NoAdvertise bool `mapstructure:"no_advertise" json:"no_advertise" yaml:"no_advertise" toml:"no_advertise"`

	//Account define the account under which leaf offer services.
	Account string `mapstructure:"account" json:"account" yaml:"account" toml:"account"`

	//Users Set the users list with account.
	Users []ConfigUser `mapstructure:"users" json:"users" yaml:"users" toml:"users" validate:"dive"`

	//ReconnectInterval define the duration to wait after a closed connection and before trying to reconnect
	ReconnectInterval time.Duration `mapstructure:"reconnect_interval" json:"reconnect_interval" yaml:"reconnect_interval" toml:"reconnect_interval"`

	//Remotes define For solicited connections to other clusters/superclusters.
	Remotes []*ConfigLeafRemote `mapstructure:"remotes" json:"remotes" yaml:"remotes" toml:"remotes"`

	//TLS Enable tls for leaf connection.
	TLS bool `mapstructure:"tls" json:"tls" yaml:"tls" toml:"tls"`

	//TLSTimeout define the timeout for tls handshake for leaf connection.
	TLSTimeout time.Duration `mapstructure:"tls_timeout" json:"tls_timeout" yaml:"tls_timeout" toml:"tls_timeout"`

	//TLSConfig define the tls configuration for leaf connection.
	TLSConfig libtls.Config `mapstructure:"tls_config" json:"tls_config" yaml:"tls_config" toml:"tls_config"`
}

ConfigLeaf are options for a given server to accept leaf node connections and/or connect to a remote cluster.

type ConfigLeafRemote

type ConfigLeafRemote struct {
	//LocalAccount define the local account to use for this remote cluster.
	LocalAccount string `mapstructure:"local_account" json:"local_account" yaml:"local_account" toml:"local_account"`

	//URLs define a list of route for the current gateways destination.
	URLs []*url.URL `mapstructure:"urls" json:"urls" yaml:"urls" toml:"urls"`

	//Credentials define the file path for authentication with credentials file
	Credentials string `mapstructure:"credentials" json:"credentials" yaml:"credentials" toml:"credentials"`

	//Hub define the remote connection as hub
	Hub bool `mapstructure:"hub" json:"hub" yaml:"hub" toml:"hub"`

	//DenyImports define a list of subject/queues denied for import
	DenyImports []string `mapstructure:"deny_imports" json:"deny_imports" yaml:"deny_imports" toml:"deny_imports"`

	//DenyExports define a list of subject/queues denied for export
	DenyExports []string `mapstructure:"deny_exports" json:"deny_exports" yaml:"deny_exports" toml:"deny_exports"`

	//Websocket define options for websocket connections.
	// When an URL has the "ws" (or "wss") scheme, then the server will initiate the
	// connection as a websocket connection. By default, the websocket frames will be
	// masked (as if this server was a websocket client to the remote server). The
	// NoMasking option will change this behavior and will send umasked frames.
	Websocket struct {
		//Compression define if compression is enable for remote ws connection
		Compression bool `mapstructure:"compression" json:"compression" yaml:"compression" toml:"compression"`

		//NoMasking define if the remote ws is must be masked.
		//By default ws are masked but this option allow to expose it.
		NoMasking bool `mapstructure:"no_masking" json:"no_masking" yaml:"no_masking" toml:"no_masking"`
	} `mapstructure:"websocket" json:"websocket" yaml:"websocket" toml:"websocket"`

	//TLS Enable tls for this remote cluster connection.
	TLS bool `mapstructure:"tls" json:"tls" yaml:"tls" toml:"tls"`

	//TLSTimeout define the timeout for tls handshake for this remote cluster connection.
	TLSTimeout time.Duration `mapstructure:"tls_timeout" json:"tls_timeout" yaml:"tls_timeout" toml:"tls_timeout"`

	//TLSConfig define the tls configuration for this remote cluster connection.
	TLSConfig libtls.Config `mapstructure:"tls_config" json:"tls_config" yaml:"tls_config" toml:"tls_config"`
}

ConfigLeafRemote are options for connecting to a remote server as a leaf node.

type ConfigLimits

type ConfigLimits struct {
	//MaxConn Set maximum connection.
	MaxConn int `mapstructure:"max_conn" json:"max_conn" yaml:"max_conn" toml:"max_conn"`

	//MaxSubs Set the maximum subscriptions.
	MaxSubs int `mapstructure:"max_subs" json:"max_subs" yaml:"max_subs" toml:"max_subs"`

	//PingInterval define a duration between 2 ping with cluster.
	PingInterval time.Duration `mapstructure:"ping_interval" json:"ping_interval" yaml:"ping_interval" toml:"ping_interval"`

	//MaxPingsOut define the number of ping error before closing connection.
	MaxPingsOut int `mapstructure:"port" json:"max_pings_out" yaml:"port" toml:"port"`

	//MaxControlLine define the maximum allowed protocol control line size.
	MaxControlLine int `mapstructure:"max_control_line" json:"max_control_line" yaml:"max_control_line" toml:"portmax_control_line"`

	//MaxPayload define the maximum allowed payload size.
	MaxPayload int `mapstructure:"max_payload" json:"max_payload" yaml:"max_payload" toml:"max_payload"`

	//MaxPending define the maximum outbound pending bytes per client.
	MaxPending int64 `mapstructure:"max_pending" json:"max_pending" yaml:"max_pending" toml:"max_pending"`

	//WriteDeadline define the deadline timeout to flush line of stream message.
	WriteDeadline time.Duration `mapstructure:"write_deadline" json:"write_deadline" yaml:"write_deadline" toml:"write_deadline"`

	//MaxClosedClients define the number of closed clients connection to keep.
	MaxClosedClients int `mapstructure:"max_closed_clients" json:"max_closed_clients" yaml:"max_closed_clients" toml:"max_closed_clients"`

	//LameDuckDuration define the timeout to closing all client in LameDuck mode with signal ldm.
	LameDuckDuration time.Duration `mapstructure:"lame_duck_duration" json:"lame_duck_duration" yaml:"lame_duck_duration" toml:"lame_duck_duration"`

	//LameDuckGracePeriod define the grace period before closing client connection for LameDuck shutdown mode.
	LameDuckGracePeriod time.Duration `` /* 127-byte string literal not displayed */

	//NoSublistCache define the option to disable subscription caches for all accounts.
	//This is saves resources in situations where different subjects are used all the time.
	NoSublistCache bool `mapstructure:"no_sublist_cache" json:"no_sublist_cache" yaml:"no_sublist_cache" toml:"no_sublist_cache"`

	//NoHeaderSupport define the option to disable header in the server.
	//No use except for nats.js, nats.ws, nats.deno and docker image nighty build.
	NoHeaderSupport bool `mapstructure:"no_header_support" json:"no_header_support" yaml:"no_header_support" toml:"no_header_support"`

	//DisableShortFirstPing define the option to disable the very first PING to a lower interval to capture the initial RTT.
	// After that the PING interval will be set to the user defined value.
	DisableShortFirstPing bool `` /* 135-byte string literal not displayed */
}

type ConfigLogger

type ConfigLogger struct {
	//LogFile define the file to store log output.
	LogFile string `mapstructure:"log_file" json:"log_file" yaml:"log_file" toml:"log_file"`

	// PermissionFolderLogFile is the permission apply if a folder is created
	PermissionFolderLogFile os.FileMode `mapstructure:"permission_folder" json:"permission_folder" yaml:"permission_folder" toml:"permission_folder"`

	// PermissionFileLogFile is the permission apply if a file is created
	PermissionFileLogFile os.FileMode `mapstructure:"permission_file" json:"permission_file" yaml:"permission_file" toml:"permission_file"`

	//Syslog define if log output must be sent to syslog.
	Syslog bool `mapstructure:"syslog" json:"syslog" yaml:"syslog" toml:"syslog"`

	//RemoteSyslog define the syslog server address like '(udp://127.0.0.1:514)'.
	RemoteSyslog string `mapstructure:"remote_syslog" json:"remote_syslog" yaml:"remote_syslog" toml:"remote_syslog"`

	//LogSizeLimit define the maximum size allowed for the log file.
	LogSizeLimit int64 `mapstructure:"log_size_limit" json:"log_size_limit" yaml:"log_size_limit" toml:"log_size_limit"`

	//MaxTracedMsgLen define the max size in chars of trace message
	MaxTracedMsgLen int `mapstructure:"max_traced_msg_len" json:"max_traced_msg_len" yaml:"max_traced_msg_len" toml:"max_traced_msg_len"`

	// ConnectErrorReports specifies the number of failed attempts at which point server should report the failure of an initial connection to a route, gateway or leaf node.
	// See DEFAULT_CONNECT_ERROR_REPORTS for default value.
	ConnectErrorReports int `mapstructure:"connect_error_reports" json:"connect_error_reports" yaml:"connect_error_reports" toml:"connect_error_reports"`

	// ReconnectErrorReports is similar to ConnectErrorReports except that this applies to reconnect events.
	ReconnectErrorReports int `` /* 131-byte string literal not displayed */
}

type ConfigMQTT

type ConfigMQTT struct {

	//Host define the hostname/IP to accept MQTT client connections.
	Host string `mapstructure:"" json:"host" yaml:"host" toml:"host"`

	//Port define the port to accept MQTT client connections.
	Port int `mapstructure:"port" json:"port" yaml:"port" toml:"port"`

	//NoAuthUser define the default user for new client connection.
	//If no user name is provided when a client connects, will default to the matching user from the global list of users in `Options.Users`.
	NoAuthUser string `mapstructure:"no_auth_user" json:"no_auth_user" yaml:"no_auth_user" toml:"no_auth_user"`

	//Username is the username used.
	Username string `mapstructure:"username" json:"username" yaml:"username" toml:"username"`

	//Password define the password used.
	Password string `mapstructure:"password" json:"password" yaml:"password" toml:"password"`

	//Token define the token used.
	Token string `mapstructure:"token" json:"token" yaml:"token" toml:"token"`

	//AuthTimeout define the timeout for authentication process.
	AuthTimeout time.Duration `mapstructure:"auth_timeout" json:"auth_timeout" yaml:"auth_timeout" toml:"auth_timeout"`

	// AckWait is the amount of time after which a QoS 1 message sent to
	// a client is redelivered as a DUPLICATE if the server has not
	// received the PUBACK on the original Packet Identifier.
	// The value has to be positive.
	// Zero will cause the server to use the default value (30 seconds).
	// Note that changes to this option is applied only to new MQTT subscriptions.
	AckWait time.Duration `mapstructure:"ack_wait" json:"ack_wait" yaml:"ack_wait" toml:"ack_wait"`

	// MaxAckPending is the amount of QoS 1 messages the server can send to
	// a subscription without receiving any PUBACK for those messages.
	// The valid range is [0..65535].
	// The total of subscriptions' MaxAckPending on a given session cannot
	// exceed 65535. Attempting to create a subscription that would bring
	// the total above the limit would result in the server returning 0x80
	// in the SUBACK for this subscription.
	// Due to how the NATS Server handles the MQTT "#" wildcard, each
	// subscription ending with "#" will use 2 times the MaxAckPending value.
	// Note that changes to this option is applied only to new subscriptions.
	MaxAckPending uint16 `mapstructure:"max_ack_pending" json:"max_ack_pending" yaml:"max_ack_pending" toml:"max_ack_pending"`

	//TLS Enable tls for this remote cluster connection.
	TLS bool `mapstructure:"tls" json:"tls" yaml:"tls" toml:"tls"`

	//TLSTimeout is the time needed for the TLS Handshake.
	TLSTimeout time.Duration `mapstructure:"tls_timeout" json:"tls_timeout" yaml:"tls_timeout" toml:"tls_timeout"`

	//TLSConfig define the tls configuration for MQTT client connection.
	TLSConfig libtls.Config `mapstructure:"tls_config" json:"tls_config" yaml:"tls_config" toml:"tls_config"`
}

ConfigMQTT are options for MQTT

type ConfigNkey

type ConfigNkey struct {
	//Nkey is a new challenge introduced by NATS v2 (ED25519 keys).
	Nkey string `mapstructure:"user" json:"user" yaml:"user" toml:"user"`

	//Account define the account associated to this NKey.
	Account string `mapstructure:"account" json:"account" yaml:"account" toml:"account"`

	// SigningKey define the ED 25519 signingKey.
	SigningKey string `mapstructure:"signing_key" json:"signing_key" yaml:"signing_key" toml:"signing_key"`

	//AllowedConnectionTypes define a list of allowed connection, in list of : STANDARD, WEBSOCKET, LEAFNODE, MQTT.
	AllowedConnectionTypes []string `mapstructure:"connection_types" json:"connection_types" yaml:"connection_types" toml:"connection_types"`
}

ConfigNkey is for multiple nkey based users.

type ConfigPermissionResponse

type ConfigPermissionResponse struct {
	//MaxMsgs define the maximum message response in the expire duration.
	MaxMsgs int `mapstructure:"max_msgs" json:"max_msgs" yaml:"max_msgs" toml:"max_msgs"`

	//Expires define the TTL of the limitation for max messages.
	Expires time.Duration `mapstructure:"expires" json:"expires" yaml:"expires" toml:"expires"`
}

ConfigPermissionResponse can be used to allow responses to any reply subject that is received on a valid subscription.

type ConfigPermissionSubject

type ConfigPermissionSubject struct {
	//Allow define the allowed scope for permission.
	Allow []string `mapstructure:"allow" json:"allow" yaml:"allow" toml:"allow"`

	//Deny define the deny scope for permission.
	Deny []string `mapstructure:"deny" json:"deny" yaml:"deny" toml:"deny"`
}

ConfigPermissionSubject is an individual allow and deny struct for publish and subscribe authorizations.

type ConfigPermissionsRoute

type ConfigPermissionsRoute struct {
	//Import define the scope permission to import data from the route.
	Import ConfigPermissionSubject `mapstructure:"import" json:"import" yaml:"import" toml:"import" validate:"dive,required"`

	//Export define the scope permission to export data to the route.
	Export ConfigPermissionSubject `mapstructure:"export" json:"export" yaml:"export" toml:"export" validate:"dive,required"`
}

ConfigPermissionsRoute are similar to user permissions but describe what a server can import/export from and to another server.

type ConfigPermissionsUser

type ConfigPermissionsUser struct {
	//Publish define the scope permission for publisher role.
	Publish ConfigPermissionSubject `mapstructure:"publish" json:"publish" yaml:"publish" toml:"publish" validate:"dive,required"`

	//Subscribe define the scope permission for subscriber role.
	Subscribe ConfigPermissionSubject `mapstructure:"subscribe" json:"subscribe" yaml:"subscribe" toml:"subscribe" validate:"dive,required"`

	//Response define the scope permission to allow response for a message.
	Response ConfigPermissionResponse `mapstructure:"response" json:"response" yaml:"response" toml:"response" validate:"dive,required"`
}

ConfigPermissionsUser are the allowed subjects on a per publish or subscribe basis.

type ConfigSrv

type ConfigSrv struct {
	//Name define the name of the server.
	Name string `mapstructure:"name" json:"name" yaml:"name" toml:"name"`

	//Host define the network host to listen on.
	Host string `mapstructure:"host" json:"host" yaml:"host" toml:"host"`

	//Port define the network port to listen on.
	Port int `mapstructure:"port" json:"port" yaml:"port" toml:"port"`

	//ClientAdvertise is an alternative client listen specification <host>:<port> or just <host> to
	//advertise to clients and other server. Useful in cluster setups with NAT.
	ClientAdvertise string `mapstructure:"client_advertise" json:"client_advertise" yaml:"client_advertise" toml:"client_advertise"`

	//HTTPHost define host use to expose monitoring api.
	HTTPHost string `mapstructure:"http_host" json:"http_host" yaml:"http_host" toml:"http_host"`

	//HTTPPort define port use to expose monitoring api.
	HTTPPort int `mapstructure:"http_port" json:"http_port" yaml:"http_port" toml:"http_port"`

	//HTTPPort define port use to expose monitoring api with tls.
	HTTPSPort int `mapstructure:"https_port" json:"https_port" yaml:"https_port" toml:"https_port"`

	//HTTPBasePath define the base path for monitoring endpoints.
	HTTPBasePath string `mapstructure:"http_base_path" json:"http_base_path" yaml:"http_base_path" toml:"http_base_path"`

	//ProfPort define the Profiling HTTP port to enable server for dynamic profiling.
	ProfPort int `mapstructure:"prof_port" json:"prof_port" yaml:"prof_port" toml:"prof_port"`

	//PidFile define the file path to store PID process.
	PidFile string `mapstructure:"pid_file" json:"pid_file" yaml:"pid_file" toml:"pid_file"`

	//PortsFileDir define the directory where ports file will be created like '<executable_name>_<pid>.ports'.
	PortsFileDir string `mapstructure:"ports_file_dir" json:"ports_file_dir" yaml:"ports_file_dir" toml:"ports_file_dir"`

	//Routes define a list of url to actively solicit a connection.
	Routes []*url.URL `mapstructure:"routes" json:"routes" yaml:"routes" toml:"routes"`

	//RoutesStr define the routes to actively solicit a connection.
	RoutesStr string `mapstructure:"routes_str" json:"routes_str" yaml:"routes_str" toml:"routes_str"`

	//NoSig is used to disable signal catch for server.
	NoSig bool `mapstructure:"no_log" json:"no_log" yaml:"no_log" toml:"no_log"`

	//Username is the username used for server connection (like flag --auth in NATS v2 documentation).
	Username string `mapstructure:"username" json:"username" yaml:"username" toml:"username"`

	//Password define the password used for server connection (like flag --auth in NATS v2 documentation).
	Password string `mapstructure:"password" json:"password" yaml:"password" toml:"password"`

	//Token define the token used for server connection (like flag --auth in NATS v2 documentation).
	Token string `mapstructure:"token" json:"token" yaml:"token" toml:"token"`

	//JetStream allow to enable or disable jetStream layer
	JetStream bool `mapstructure:"jet_stream" json:"jet_stream" yaml:"jet_stream" toml:"jet_stream"`

	//JetStreamMaxMemory define the maximum memory used for jetStream in memory store type
	JetStreamMaxMemory int64 `mapstructure:"jet_stream_max_memory" json:"jet_stream_max_memory" yaml:"jet_stream_max_memory" toml:"jet_stream_max_memory"`

	//JetStreamMaxStore define the maximum disk used for jetStream in file store type
	JetStreamMaxStore int64 `mapstructure:"jet_stream_max_store" json:"jet_stream_max_store" yaml:"jet_stream_max_store" toml:"jet_stream_max_store"`

	//StoreDir define the directory path for jetStream in file store type
	StoreDir string `mapstructure:"store_dir" json:"store_dir" yaml:"store_dir" toml:"store_dir"`

	// PermissionStoreDir is the permission apply if a folder is created
	PermissionStoreDir os.FileMode `mapstructure:"permission_store_dir" json:"permission_store_dir" yaml:"permission_store_dir" toml:"permission_store_dir"`

	//Tags describing the server.
	//They will be included in varz and used as a filter criteria for some system requests
	Tags jwt.TagList `mapstructure:"tags" json:"tags" yaml:"tags" toml:"tags" validate:"dive"`

	//TLS Enable tls for server.
	TLS bool `mapstructure:"tls" json:"tls" yaml:"tls" toml:"tls"`

	//AllowNoTLS define if client no TLS connection are allowed or no.
	AllowNoTLS bool `mapstructure:"allow_no_tls" json:"allow_no_tls" yaml:"allow_no_tls" toml:"allow_no_tls"`

	//TLSTimeout define the timeout for tls handshake for client and http monitoring.
	TLSTimeout time.Duration `mapstructure:"tls_timeout" json:"tls_timeout" yaml:"tls_timeout" toml:"tls_timeout"`

	//TLSConfig Configuration map for tls for client and http monitoring.
	TLSConfig libtls.Config `mapstructure:"tls_config" json:"tls_config" yaml:"tls_config" toml:"tls_config" validate:"dive"`
}

type ConfigUser

type ConfigUser struct {
	//Username is the username used for connection.
	Username string `mapstructure:"username" json:"username" yaml:"username" toml:"username"`

	//Password define the password used for connection.
	Password string `mapstructure:"password" json:"password" yaml:"password" toml:"password"`

	//Account define the account associated to this NKey.
	Account string `mapstructure:"account" json:"account" yaml:"account" toml:"account"`

	//AllowedConnectionTypes define a list of allowed connection, in list of : STANDARD, WEBSOCKET, LEAFNODE, MQTT.
	AllowedConnectionTypes []string `mapstructure:"connection_types" json:"connection_types" yaml:"connection_types" toml:"connection_types"`
}

ConfigUser is for multiple accounts/users.

type ConfigWebsocket

type ConfigWebsocket struct {

	//Host The server will accept websocket client connections on this hostname/IP.
	Host string `mapstructure:"" json:"host" yaml:"host" toml:"host"`

	//Port The server will accept websocket client connections on this port.
	Port int `mapstructure:"port" json:"port" yaml:"port" toml:"port"`

	//Advertise The host:port to advertise to websocket clients in the cluster.
	Advertise string `mapstructure:"advertise" json:"advertise" yaml:"advertise" toml:"advertise"`

	//NoAuthUser define the default user for new client connection.
	//If no user name is provided when a client connects, will default to the matching user from the global list of users in `Options.Users`.
	NoAuthUser string `mapstructure:"no_auth_user" json:"no_auth_user" yaml:"no_auth_user" toml:"no_auth_user"`

	//JWTCookie define the name of the cookie, which if present in WebSocket upgrade headers,
	//will be treated as JWT during CONNECT phase as long as "jwt" specified in the CONNECT options is missing or empty.
	JWTCookie string `mapstructure:"jwt_cookie" json:"jwt_cookie" yaml:"jwt_cookie" toml:"jwt_cookie"`

	//Username is the username used.
	Username string `mapstructure:"username" json:"username" yaml:"username" toml:"username"`

	//Password define the password used.
	Password string `mapstructure:"password" json:"password" yaml:"password" toml:"password"`

	//Token define the token used.
	Token string `mapstructure:"token" json:"token" yaml:"token" toml:"token"`

	//AuthTimeout define the timeout for authentication process.
	AuthTimeout time.Duration `mapstructure:"auth_timeout" json:"auth_timeout" yaml:"auth_timeout" toml:"auth_timeout"`

	//SameOrigin define if request's host must match the Origin header or not.
	SameOrigin bool `mapstructure:"same_origin" json:"same_origin" yaml:"same_origin" toml:"same_origin"`

	//AllowedOrigins define a list of allowed origin could not matching with request's host.
	// Only origins in this list will be accepted. If empty and SameOrigin is false, any origin is accepted.
	AllowedOrigins []string `mapstructure:"allowed_origins" json:"allowed_origins" yaml:"allowed_origins" toml:"allowed_origins"`

	//Compression allow to activate compression between client and server.
	//If set to true, the server will negotiate with clients if compression can be used.
	//If this is false, no compression will be used (both in server and clients) since it has to be negotiated between both endpoints
	Compression bool `mapstructure:"compression" json:"compression" yaml:"compression" toml:"compression"`

	// NoTLS allow to start websocket server without tls.
	NoTLS bool `mapstructure:"no_tls" json:"no_tls" yaml:"no_tls" toml:"no_tls"`

	//HandshakeTimeout is the total time allowed for the server to read the client request and write the response back to the client.
	//This include the time needed for the TLS Handshake.
	HandshakeTimeout time.Duration `mapstructure:"handshake_timeout" json:"handshake_timeout" yaml:"handshake_timeout" toml:"handshake_timeout"`

	//TLSConfig define the tls configuration for this remote cluster connection.
	TLSConfig libtls.Config `mapstructure:"tls_config" json:"tls_config" yaml:"tls_config" toml:"tls_config"`
}

ConfigWebsocket are options for websocket

type Server

type Server interface {
	Listen(ctx context.Context) liberr.Error
	Restart(ctx context.Context) liberr.Error
	Shutdown()

	GetOptions() *natsrv.Options
	SetOptions(opt *natsrv.Options)

	IsRunning() bool
	IsReady() bool
	WaitReady(ctx context.Context, tick time.Duration)

	ClientAdvertise(ctx context.Context, tick time.Duration, defTls libtls.TLSConfig, opt Client) (cli *natcli.Conn, err liberr.Error)
	ClientCluster(ctx context.Context, tick time.Duration, defTls libtls.TLSConfig, opt Client) (cli *natcli.Conn, err liberr.Error)
	ClientServer(ctx context.Context, tick time.Duration, defTls libtls.TLSConfig, opt Client) (cli *natcli.Conn, err liberr.Error)
}

func NewServer

func NewServer(opt *natsrv.Options) Server

Jump to

Keyboard shortcuts

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