• Stars
    star
    2,605
  • Rank 17,573 (Top 0.4 %)
  • Language
    C#
  • License
    MIT License
  • Created over 6 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Near-zero config .NET library that makes advanced application features like Task Scheduling, Caching, Queuing, Event Broadcasting, and more a breeze!

Netlify Status

Nuget NuGet

Coravel

Coravel helps developers get their .NET applications up and running fast by making advanced application features like task/job scheduling, queuing, caching, mailing (and more!) accessible and easy to use. Comes with simple, expressive and straightforward syntax.

You can view the official docs here.

Coravel Scheduler

Features:

Task/Job Scheduling

Usually, you have to configure a cron job or a task via Windows Task Scheduler to get a single or multiple re-occurring tasks to run.

With Coravel, you can setup all your scheduled tasks in one place using a simple, elegant, fluent syntax - in code!

Queuing

Coravel gives you a zero-configuration queue that runs in-memory to offload long-winded tasks to the background instead of making your users wait for their HTTP request to finish!

Caching

Coravel provides you with an easy to use API for caching in your .NET Core applications.

By default, it uses an in-memory cache, but also has database drivers for more robust scenarios!

Event Broadcasting

Coravel's event broadcasting helps you to build maintainable applications who's parts are loosely coupled!

Mailing

E-mails are not as easy as they should be. Luckily for you, Coravel solves this by offering:

  • Built-in e-mail friendly razor templates
  • Simple and flexible mailing API
  • Render your e-mails for visual testing
  • Drivers supporting SMTP, local log file or BYOM ("bring your own mailer") driver
  • Quick and simple configuration via appsettings.json
  • And more!

Samples

Support Me

You can support my ongoing open-source work on BuyMeACoffee.

Coravel Pro

If you are building a .NET application with Entity Framework then you might want to look into Coravel Pro. It is an admin panel & tools to make maintaining and managing your .NET app a breeze!

  • Visual job scheduling & management
  • Scaffold a CRUD UI for managing your EF entities
  • Easily configure a dashboard to show health metrics (or whatever you want)
  • Build custom tabular reports of your data
  • And more!

FAQ

How is Coravel different from Hangfire?

Hangfire has been around for a while - before modern .NET (Core). It's a fantastic tool that has tons of features that Coravel doesn't. Notably: persistent queues, retry mechanisms, support for many storage drivers, etc.

However, Hangfire still (as of March 2023) does not natively support true async/await (here and here). This means that using Hangfire within a web application, for example, won't be as efficient as it could be when using threads that perform I/O operations.

Coravel was created with modern C# and .NET primitives in mind - such as async/await and .NET's built-in dependency injection utilities. This means that Coravel can be easier to configure and will be very efficient with / won't hog threads that your web application needs to respond to incoming HTTP requests.

How is Coravel different from Quartz?

Quartz is an older Java library ported to .NET. It still doesn't hook into the modern .NET dependency injection tooling well. Some think that Coravel's APIs are much more succinct and understandable.

For example, compare this sample from their documentation with how working with Coravel is (e.g. you don't need to understand how to "start" and "stop" Coravel's scheduler, but you do have to manually work with the Quartz scheduler).

Does Coravel support persisting queued jobs to storage in case my application goes down?

No. At least, not yet.

Coravel processes queued items in-memory. When your application goes down it won't allow the application to shutdown until all items are processed.

Does Coravel support retry mechanisms?

Coravel's philosophy has been to work well with other .NET primitives - which means that using other libraries is easy.

Coravel doesn't support retry mechanisms internally because I am very careful not to bloat Coravel with things that aren't necessary. I want to keep Coravel focused on what it does best (e.g. "I need job scheduling, queuing, etc. without requiring extra infrastructure and complicated configuration").

For example, you can use Polly within your invocables to do retries. Some people will configure a base class that inherits from IInvocable that has retries built-in.

Does Coravel support distributed locking?

No. However, this can again be achieved by using a battle-tested distributed locking library like DistributedLock. You might create an invocable's Invoke() like this:

public class TestInvocable : IInvocable
{
  private ApplicationDbContext _context;
  private IDistributedLockProvider _distributedlock;

  public TestInvocable(ApplicationDbContext context, IDistributedLockProvider distributedlock)
  {
    this._context = context;
    this._distributedlock = distributedlock;
  }

  public async Task Invoke()
  {
    await using (await this._distributedlock.AcquireAsync())
    {
      await this._context.Test.AddAsync(new TestModel() { Name = "test name" });
      await this._context.SaveChangesAsync();
    }
  }
}

More Repositories

1

coravelpro

Professional Admin Panel And Tools For .NET Core Apps
38
star
2

event-sourcing-typescript-lessons

Exploring the basics of event sourcing in TypeScript
TypeScript
19
star
3

net-core-modular-monolith-razor-lib

Sample for building modular monoliths using .NET Core razor class libraries
HTML
14
star
4

csharp-linq-vs-enumerator-benchmark

Benchmarking C# iterator optimization
C#
7
star
5

Dapper.Crud

Easy Insert, Update, Delete operations using Dapper.
C#
4
star
6

statica

Dead simple zero config static site generator
JavaScript
4
star
7

JavaScript-Sql

JavaScript library that provides SQL like syntax to semantically / logically perform "queries" on JavaScript arrays.
JavaScript
4
star
8

event-sourced-call-audit

Demo web app that audits phone calls using vonage and event sourcing
C#
2
star
9

influxdb-csharp-client-sample

C#
2
star
10

dotnet-coravel-github-import

Sample of a .NET application to import GitHub repos using Coravel
C#
2
star
11

vonage-api-dotnet-fraud-service

Sample application showing how to use the Vonage Number Insights API with a .NET microservice
C#
1
star
12

electron-vue-simple-boilerplate

electron + vuejs version 2 simpler boilerplate
JavaScript
1
star
13

life-decision-records

ADRs but for important life decisions
1
star
14

okta-dotnet-microservices

Sample .NET application showcasing using Okta, .NET and Docker to build microservices
C#
1
star
15

electron-sword

Electron bible reading app using vuejs for UI
JavaScript
1
star
16

easy-objects

A tiny library to work with object properties in a semantic fashion.
JavaScript
1
star
17

coravel-multi-queue-sample

Samples using Coravel to queue multiple invocables & events.
C#
1
star