Documentation ¶
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type CronFunc ¶ added in v2.0.2
CronFunc is a first class function that is asynchronously executed on a timed interval. Return false to indicate that the cron should end
type LoopFunc ¶ added in v2.0.4
LoopFunc is a first class function that is asynchronously executed over and over again. Return false to indicate that the loop should end
type Machine ¶
type Machine interface { // Publish synchronously publishes the Message Publish(ctx context.Context, msg Message) // Subscribe synchronously subscribes to messages on a given channel, executing the given HandlerFunc UNTIL the context cancels OR false is returned by the HandlerFunc. // Glob matching IS supported for subscribing to multiple channels at once. Subscribe(ctx context.Context, channel string, handler MessageHandlerFunc, opts ...SubscriptionOpt) // Go asynchronously executes the given Func Go(ctx context.Context, fn Func) // Cron asynchronously executes the given function on a timed interval UNTIL the context cancels OR false is returned by the CronFunc Cron(ctx context.Context, interval time.Duration, fn CronFunc) // Loop asynchronously executes the given function repeatedly UNTIL the context cancels OR false is returned by the LoopFunc Loop(ctx context.Context, fn LoopFunc) // Wait blocks until all active async functions(Loop, Go, Cron) exit Wait() // Close blocks until all active routine's exit(calls Wait) then closes all active subscriptions Close() }
Machine is an interface for highly asynchronous Go applications
func New ¶
New creates a new Machine instance with the given options(if present)
Example ¶
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() var ( m = machine.New() results []string mu sync.RWMutex ) defer m.Close() m.Go(ctx, func(ctx context.Context) error { m.Subscribe(ctx, "accounting.*", func(ctx context.Context, msg machine.Message) (bool, error) { mu.Lock() results = append(results, fmt.Sprintf("(%s) received msg: %v\n", msg.GetChannel(), msg.GetBody())) mu.Unlock() return true, nil }) return nil }) m.Go(ctx, func(ctx context.Context) error { m.Subscribe(ctx, "engineering.*", func(ctx context.Context, msg machine.Message) (bool, error) { mu.Lock() results = append(results, fmt.Sprintf("(%s) received msg: %v\n", msg.GetChannel(), msg.GetBody())) mu.Unlock() return true, nil }) return nil }) m.Go(ctx, func(ctx context.Context) error { m.Subscribe(ctx, "human_resources.*", func(ctx context.Context, msg machine.Message) (bool, error) { mu.Lock() results = append(results, fmt.Sprintf("(%s) received msg: %v\n", msg.GetChannel(), msg.GetBody())) mu.Unlock() return true, nil }) return nil }) m.Go(ctx, func(ctx context.Context) error { m.Subscribe(ctx, "*", func(ctx context.Context, msg machine.Message) (bool, error) { mu.Lock() results = append(results, fmt.Sprintf("(%s) received msg: %v\n", msg.GetChannel(), msg.GetBody())) mu.Unlock() return true, nil }) return nil }) <-time.After(1 * time.Second) m.Publish(ctx, machine.Msg{ Channel: "human_resources.chat_room6", Body: "hello world human resources", }) m.Publish(ctx, machine.Msg{ Channel: "accounting.chat_room2", Body: "hello world accounting", }) m.Publish(ctx, machine.Msg{ Channel: "engineering.chat_room1", Body: "hello world engineering", }) m.Wait() sort.Strings(results) for _, res := range results { fmt.Print(res) }
Output: (accounting.chat_room2) received msg: hello world accounting (accounting.chat_room2) received msg: hello world accounting (engineering.chat_room1) received msg: hello world engineering (engineering.chat_room1) received msg: hello world engineering (human_resources.chat_room6) received msg: hello world human resources (human_resources.chat_room6) received msg: hello world human resources
type MessageFilterFunc ¶ added in v2.0.2
Filter is a first class function to filter out messages before they reach a subscriptions primary Handler Return true to indicate that a message passes the filter
type MessageHandlerFunc ¶ added in v2.0.2
Handler is a first class that is executed against the inbound message in a subscription. Return false to indicate that the subscription should end
type Opt ¶
type Opt func(o *Options)
Opt configures a machine instance
func WithErrHandler ¶
WithErrHandler overrides the default machine error handler
func WithThrottledRoutines ¶
WithThrottledRoutines throttles the max number of active routine's spawned by the Machine.
type Options ¶
type Options struct {
// contains filtered or unexported fields
}
Options holds config options for a machine instance
type SubscriptionOpt ¶ added in v2.0.2
type SubscriptionOpt func(options *SubscriptionOptions)
SubscriptionOpt configures a subscription
func WithFilter ¶
func WithFilter(filter MessageFilterFunc) SubscriptionOpt
WithFilter is a subscription option that filters messages
type SubscriptionOptions ¶ added in v2.0.2
type SubscriptionOptions struct {
// contains filtered or unexported fields
}
SubscriptionOptions holds config options for a subscription