Skip to content

SqlServerTransport

Brian Lehnen edited this page Nov 3, 2015 · 4 revisions

SQL Server Transport

The SQL server transport uses SQL tables to store messages. It supports the following features

  • Delayed messages
  • Message expiration
  • Message priority
  • User Defined metadata
  • Transactional or status based or FIFO with no rollback

The SQL transport requries that the queue be created before usage. This can be done manually, or via the queue creation classes.

######Creating queues

//Create the queue if it doesn't exist
var queueName = "testing";
var connectionString = "Server=V-SQL;Application Name=SQLProducer;Database=TestR;Trusted_Connection=True;";
using (var createQueueContainer = new QueueCreationContainer<SqlServerMessageQueueInit>())
{
	using (var createQueue = createQueueContainer.GetQueueCreation<SqlServerMessageQueueCreation>(queueName, connectionString))
	{
		if (!createQueue.QueueExists)
		{
        	//set specific queue options here before calling create
			createQueue.CreateQueue();
		}
	}
}

######Usage

[Producer]

using (var queueContainer = new QueueContainer<SqlServerMessageQueueInit>())
{
	using (var queue = queueContainer.CreateProducer<SimpleMessage>(queueName, connectionString))
    {
		queue.Send(new SimpleMessage {Message = "Hello World"});
    }
}

[Consumer]

using (var queueContainer = new QueueContainer<SqlServerMessageQueueInit>())
{
	using (var queue = queueContainer.CreateConsumer(queueName, connectionString))
    {
		queue.Start<SimpleMessage>(HandleMessages);
		Console.WriteLine("Processing messages - press any key to stop");
        Console.ReadKey((true));
    }
}

private void HandleMessages(IReceivedMessage<SimpleMessage> message, IWorkerNotification notifications)
{
	notifications.Log.Debug($"Processing Message {message.Body.Message}");
}
Clone this wiki locally