event

package
v0.0.0-...-5d05a64 Latest Latest
Warning

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

Go to latest
Published: Sep 21, 2022 License: MIT Imports: 4 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type ResubscribeErrFunc

type ResubscribeErrFunc func(context.Context, error) (Subscription, error)

A ResubscribeErrFunc attempts to establish a subscription. For every call but the first, the second argument to this function is the error that occurred with the previous subscription.

type ResubscribeFunc

type ResubscribeFunc func(context.Context) (Subscription, error)

A ResubscribeFunc attempts to establish a subscription.

type Subscription

type Subscription interface {
	Err() <-chan error // returns the error channel
	Unsubscribe()      // cancels sending of events, closing the error channel
}

Subscription represents a stream of events. The carrier of the events is typically a channel, but isn't part of the interface.

Subscriptions can fail while established. Failures are reported through an error channel. It receives a value if there is an issue with the subscription (e.g. the network connection delivering the events has been closed). Only one value will ever be sent.

The error channel is closed when the subscription ends successfully (i.e. when the source of events is closed). It is also closed when Unsubscribe is called.

The Unsubscribe method cancels the sending of events. You must call Unsubscribe in all cases to ensure that resources related to the subscription are released. It can be called any number of times.

func NewSubscription

func NewSubscription(producer func(<-chan struct{}) error) Subscription

NewSubscription runs a producer function as a subscription in a new goroutine. The channel given to the producer is closed when Unsubscribe is called. If fn returns an error, it is sent on the subscription's error channel.

func Resubscribe

func Resubscribe(backoffMax time.Duration, fn ResubscribeFunc) Subscription

Resubscribe calls fn repeatedly to keep a subscription established. When the subscription is established, Resubscribe waits for it to fail and calls fn again. This process repeats until Unsubscribe is called or the active subscription ends successfully.

Resubscribe applies backoff between calls to fn. The time between calls is adapted based on the error rate, but will never exceed backoffMax.

func ResubscribeErr

func ResubscribeErr(backoffMax time.Duration, fn ResubscribeErrFunc) Subscription

ResubscribeErr calls fn repeatedly to keep a subscription established. When the subscription is established, ResubscribeErr waits for it to fail and calls fn again. This process repeats until Unsubscribe is called or the active subscription ends successfully.

The difference between Resubscribe and ResubscribeErr is that with ResubscribeErr, the error of the failing subscription is available to the callback for logging purposes.

ResubscribeErr applies backoff between calls to fn. The time between calls is adapted based on the error rate, but will never exceed backoffMax.

type SubscriptionScope

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

SubscriptionScope provides a facility to unsubscribe multiple subscriptions at once.

For code that handle more than one subscription, a scope can be used to conveniently unsubscribe all of them with a single call. The example demonstrates a typical use in a larger program.

The zero value is ready to use.

func (*SubscriptionScope) Close

func (sc *SubscriptionScope) Close()

Close calls Unsubscribe on all tracked subscriptions and prevents further additions to the tracked set. Calls to Track after Close return nil.

func (*SubscriptionScope) Count

func (sc *SubscriptionScope) Count() int

Count returns the number of tracked subscriptions. It is meant to be used for debugging.

func (*SubscriptionScope) Track

Track starts tracking a subscription. If the scope is closed, Track returns nil. The returned subscription is a wrapper. Unsubscribing the wrapper removes it from the scope.

Jump to

Keyboard shortcuts

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