LightningQueues 0.5.0-alpha.2

This is a prerelease version of LightningQueues.
dotnet add package LightningQueues --version 0.5.0-alpha.2                
NuGet\Install-Package LightningQueues -Version 0.5.0-alpha.2                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="LightningQueues" Version="0.5.0-alpha.2" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add LightningQueues --version 0.5.0-alpha.2                
#r "nuget: LightningQueues, 0.5.0-alpha.2"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install LightningQueues as a Cake Addin
#addin nuget:?package=LightningQueues&version=0.5.0-alpha.2&prerelease

// Install LightningQueues as a Cake Tool
#tool nuget:?package=LightningQueues&version=0.5.0-alpha.2&prerelease                

LightningQueues - Fast Persistent Queues for .NET


.NET Tests NuGet version

LightningQueues is a high-performance, lightweight, store-and-forward message queue for .NET applications. Powered by LightningDB (LMDB), it ensures fast and durable persistence for sending and receiving messages, making it an excellent choice for lightweight and cross-platform message queuing needs.


Why LightningQueues?

  • Simple API: Easily interact with the message queue through an intuitive API.
  • No Administration: Unlike MSMQ or other Server / Brokers, it requires zero administrative setup.
  • XCopy Deployable: No complex installation; just copy and run.
  • Cross-Platform: Works on Windows, macOS, and Linux.
  • Durable Storage: Leverages LMDB for high-performance reliable message storage.
  • TLS Encryption: Optionally secure your transport layer. You have full control.

Installation

To use LightningQueues, add it to your .NET project via NuGet:

dotnet add package LightningQueues

Getting Started

Here’s how to use LightningQueues to set up a message queue and send a message:

1. Creating a Queue

using LightningQueues;

// Define queue location and create the queue
var queue = new QueueConfiguration()
         .WithDefaults("C:\\path_to_your_queue_folder")
         .BuildAndStart("queue-name");

2. Sending Messages

// Send a message to the queue
var message = new Message
{
     Data = "hello"u8.ToArray(),
     Id = MessageId.GenerateRandom(), //source identifier (for the server instance) + message identifier
     Queue = "queue-name",
     Destination = new Uri("lq.tcp://localhost:port")
     //Note the uri pattern, can be DNS, loopback, etc.
};
queue.Send(message);

3. Receiving Messages

// Start receiving messages asynchronously with IAsyncEnumerable<MessageContext>
var messages = queue.Receive("queue-name", token);
await foreach (var msg in messages)
{
    //process the message and respond with one or more of the following
    msg.QueueContext.ReceiveLater(TimeSpan.FromSeconds(1));
    msg.QueueContext.SuccessfullyReceived(); //nothing more to do, done processing
    msg.QueueContext.Enqueue(msg.Message); //ideally a new message enqueued to the queue name on the msg
    msg.QueueContext.Send(msg.Message); //send a response or send a message to another uri;
    msg.QueueContext.MoveTo("different-queue"); //moves the currently received message to a different queue
    msg.QueueContext.CommitChanges(); // Everything previous is gathered in memory and committed in one transaction with LightningDB
}

Running Tests

To ensure everything is running smoothly, clone the repository and run:

dotnet test

Transport Security (TLS Encryption)

LightningQueues supports TLS encryption to secure communication. The library provides hooks to enable custom certificate validation and encrylightningqueues.jpgption settings. For example:

var certificate = LoadYourCertificate();
configuration.SecureTransportWith(new TlsStreamSecurity(async (uri, stream) =>
{
    //client side with no validation of server certificate
    var sslStream = new SslStream(stream, true, (_, _, _, _) => true, null);
    await sslStream.AuthenticateAsClientAsync(uri.Host);
    return sslStream;
}),
new TlsStreamSecurity(async (_, stream) =>
{
    var sslStream = new SslStream(stream, false);
    await sslStream.AuthenticateAsServerAsync(certificate, false,
        checkCertificateRevocation: false, enabledSslProtocols: SslProtocols.Tls12);
    return sslStream;
}));

You can customize the encryption level based on your requirements.


Licensed under the MIT license.

Product Compatible and additional computed target framework versions.
.NET net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (4)

Showing the top 4 NuGet packages that depend on LightningQueues:

Package Downloads
FubuMVC.LightningQueues

Package Description

LightningQueues.Storage.LMDB

LightningQueues.Storage.LMDB

FubuTransportation.LightningQueues

LightningQueues integration for FubuTransporation projects

JasperBus

Jasper Service Bus for Messaging Based Architectures

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
0.5.0-alpha.2 54 2/27/2025
0.5.0-alpha.1 47 2/27/2025
0.4.0 2,097 1/16/2021
0.3.2 1,690 3/25/2020
0.3.1 835 3/20/2020
0.3.0 852 2/26/2020
0.2.12 33,513 11/23/2016
0.2.11 6,302 11/8/2016
0.2.10 3,650 9/23/2016
0.2.9 2,759 9/2/2016
0.2.8 1,944 8/29/2016
0.2.7 1,743 8/20/2016
0.2.6 1,942 8/20/2016
0.2.5 2,134 8/16/2016
0.2.4 1,791 8/10/2016
0.2.3 2,502 8/8/2016
0.2.2 1,789 8/3/2016
0.2.1 1,964 7/29/2016
0.2.0 2,440 7/27/2016
0.2.0-rc2-39 1,450 7/25/2016
0.2.0-rc2-35 1,461 7/20/2016
0.2.0-rc2-33 1,504 6/28/2016
0.1.0.149 4,828 3/22/2016
0.1.0.147 2,101 12/9/2015
0.1.0.134 1,742 11/4/2015
0.1.0.132 1,714 10/30/2015
0.1.0.128 1,867 10/8/2015
0.1.0.81 1,887 6/26/2014
0.1.0.72 7,487 12/17/2013