Skip to content

Go package that provides a mechanism for actors to receive time delayed reminders.

License

Notifications You must be signed in to change notification settings

artyomturkin/protoactor-go-reminder

Repository files navigation

Proto Actor [Go] - Reminder

Go Report Card

Go package that provides a mechanism for actors to receive time delayed reminders.

Idea based on Microsoft Orleans Reminders

Get started

Install package:

go get github.com/artyomturkin/protoactor-go-reminder

Create a reminder actor. It requires persistence plugin to work.

func main() {
	//Create reminder actor with 10 ms trigger window and InMemory Persistence store
	remProps := actor.FromProducer(reminder.Producer(10 * time.Millisecond)).
		WithMiddleware(persistence.Using(newProvider(5)))
	rem, err := actor.SpawnNamed(remProps, "reminder")
	if err != nil {
		fmt.Printf("failed to spawn reminder: %v", err)
		os.Exit(1)
	}

	.....
}

Define actor, that can setup and receive reminders

type exampleActor struct {
	reminder.Mixin
}

type ExampleMessage struct{}

func (r *exampleActor) Receive(ctx actor.Context) {
	switch msg := ctx.Message().(type) {
	case *ExampleMessage:
		r.RemindMe("hello", 1*time.Millisecond, false)
	case *msgs.Remind:
		if msg.Name == "hello" {
			fmt.Printf("Received reminder %s\n", msg.Name)
		}
	}
}

Create example actor instance

func main() {
	.....
	recProps := actor.FromProducer(exampleActorProducer).
		WithMiddleware(reminder.Reminder(rem))
	rec, err := actor.SpawnNamed(recProps, "receiver")
	if err != nil {
		fmt.Printf("failed to spawn receiver: %v", err)
		os.Exit(1)
	}
	.....
}

Tell example actor to setup a remind for itself

func main() {
	.....

	rec.Tell(&ExampleMessage{})
	
	.....
}

About

Go package that provides a mechanism for actors to receive time delayed reminders.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published