Skip to content

voids/Beanstalk.Net

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Beanstalk.Net

Beanstalkd C# client based on .NET Standard 2.0.

Installing

Install the Beanstalk.Net NuGet package:

dotnet add package Beanstalk.Net

Quick start

Produce

protected async Task AfterBooking(Order order) {
    // after booking
    await beanstalk.Issue(new UseTube("payment-check").OnUsing(null));
    // write order id as bytes
    var data = BitConverter.GetBytes(order.Id);
    // tell the consumer to check the payment status after 15 minutes
    var putCmd = new Put(data).SetDelay(TimeSpan.FromMinutes(15)).OnInserted(async id => {
        _logger.LogDebug("Put ==> Job <{id}>", id);
        // do sth async...
    });
    await beanstalk.Issue(put);
}

Consume

protected override async Task ExecuteAsync(CancellationToken token) {
    await beanstalk.Issue(new WatchTube("payment-check").OnWatching(null));
    while (!token.IsCancellationRequested) {
        try {
            var reserve = new Reserve(30).OnReserved(async (id, data) => {
                // convert bytes to order id 
                var orderId = BitConverter.ToInt64(data, 0);
                _logger.LogDebug("Reserve ==> job <{id}>", id);
                // close order if not paid
                await HandleOrder(orderid);
                // delete job
                beanstalk.Issue(new DeleteJob(id).OnDeleted(null));
            }).OnTimedOut(null);
            await beanstalk.Issue(put);
        } catch (Exception e) {
            _logger.LogError("{e}", e);
        }
    }
}

About

Beanstalkd C# client

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages