This is a distributed job runner for .NET Standard 2.0 Applications.
Inspired by Celery for Python, it allows you to quickly queue code execution on a worker pool.
-
Use natural expression syntax to queue jobs for execution.
-
Queued jobs are persisted, and automatically run by the first available worker.
-
Scale your worker pool by simply adding new nodes.
-
Backed by Redis, all tasks are persistent.
We recommend using the dotnet cli to get started, but it's not a necessity.
The dotnet cli is part of the .NET Core SDK.
We recommend using docker to start a local Redis instance for testing. Setting up a production-level Redis instance is out of the scope of this documentation.
$ docker run -d -p 127.0.0.1:6379:6379 redis:4-alpine
Open up a terminal and create a new console project to get started.
$ mkdir myProject && cd myProject
$ dotnet new console
$ dotnet add package Gofer.NET --version 1.0.0-*
This example Program.cs
shows how to queue jobs for the worker pool to process, then start a worker to go and run them.
Some important notes:
-
Workers would usually be on a separate machine from the code queueing the jobs, this is purely to give an example.
-
More workers can be added at any time, and will start picking up jobs off the queue immediately.
public class Program
{
public static async Task Main(string[] args)
{
var redisConnectionString = "127.0.0.1:6379";
// Create a Task Client connected to Redis
var taskClient = new TaskClient(TaskQueue.Redis(redisConnectionString));
// Queue up a Sample Job
await taskClient.TaskQueue.Enqueue(() => SampleJobFunction("Hello World!"));
// Start the task listener, effectively turning this process into a worker.
// NOTE: This will loop endlessly waiting for new tasks.
await taskClient.Listen();
}
private static void SampleJobFunction(object value)
{
Console.WriteLine(value.ToString());
}
}
Read the Docs for more details.