Interface IMessageQueue<T>
- Namespace
- DotCompute.Abstractions.Messaging
- Assembly
- DotCompute.Abstractions.dll
Thread-safe message queue for Ring Kernel actor communication.
public interface IMessageQueue<T> : IMessageQueue, IDisposable where T : IRingKernelMessage
Type Parameters
TThe message type implementing IRingKernelMessage.
- Inherited Members
- Extension Methods
Remarks
Provides lock-free or low-contention message passing between Ring Kernels with configurable backpressure, priority ordering, and deduplication.
Thread Safety: All operations are thread-safe and can be called concurrently from multiple threads. Lock-free implementations use atomic operations for optimal performance.
Usage:
var options = new MessageQueueOptions
{
Capacity = 2048,
EnablePriorityQueue = true,
BackpressureStrategy = BackpressureStrategy.DropOldest
};
using var queue = MessageQueueFactory.Create<MyMessage>(options);
// Producer
var message = new MyMessage { Value = 42 };
if (queue.TryEnqueue(message))
{
Console.WriteLine($"Enqueued: {message.MessageId}");
}
// Consumer
if (queue.TryDequeue(out var received))
{
Console.WriteLine($"Received: {received.Value}");
}
Methods
TryDequeue(out T?)
Attempts to dequeue a message from the queue.
bool TryDequeue(out T? message)
Parameters
messageTWhen this method returns true, contains the dequeued message; otherwise, null.
Returns
- bool
True if a message was successfully dequeued; false if the queue is empty.
Remarks
This is a non-blocking operation. If the queue is empty, the method returns immediately with false.
For priority queues, returns the highest priority message. For FIFO queues, returns the oldest message.
Expired messages (older than MessageTimeout) are automatically removed and not returned.
Exceptions
- ObjectDisposedException
Thrown when the queue has been disposed.
TryEnqueue(T, CancellationToken)
Attempts to enqueue a message to the queue.
bool TryEnqueue(T message, CancellationToken cancellationToken = default)
Parameters
messageTThe message to enqueue.
cancellationTokenCancellationTokenCancellation token for blocking operations.
Returns
- bool
True if the message was successfully enqueued; false if the queue is full and the backpressure strategy is Reject.
Remarks
Behavior depends on the configured BackpressureStrategy:
- Block: Waits until space is available (respects cancellation token)
- DropOldest: Drops oldest message and enqueues new one (returns true)
- Reject: Returns false immediately if queue is full
- DropNew: Drops new message and returns true
If deduplication is enabled, duplicate messages (same MessageId) are silently dropped and true is returned.
Exceptions
- ArgumentNullException
Thrown when
messageis null.- OperationCanceledException
Thrown when the operation is cancelled via
cancellationToken.- ObjectDisposedException
Thrown when the queue has been disposed.
TryPeek(out T?)
Attempts to peek at the next message without removing it from the queue.
bool TryPeek(out T? message)
Parameters
messageTWhen this method returns true, contains the next message; otherwise, null.
Returns
- bool
True if a message is available; false if the queue is empty.
Remarks
This is a non-blocking operation. The message remains in the queue after peeking and will be returned by subsequent Dequeue operations.
Thread safety: Another thread may dequeue the peeked message before you attempt to dequeue it. Use TryDequeue for atomic read-and-remove.
Exceptions
- ObjectDisposedException
Thrown when the queue has been disposed.