public void EnqueueDirectlyTo(string queue, string subqueue, MessagePayload payload)
{
EnsureEnlistment();
var message = new PersistentMessage
{
Data = payload.Data,
Headers = payload.Headers,
Id = new MessageId
{
SourceInstanceId = queueStorage.Id,
MessageIdentifier = GuidCombGenerator.Generate()
},
Queue = queue,
SentAt = DateTime.Now,
SubQueue = subqueue,
Status = MessageStatus.EnqueueWait
};
queueStorage.Global(actions =>
{
var queueActions = actions.GetQueue(queue);
var bookmark = queueActions.Enqueue(message);
actions.RegisterUpdateToReverse(Enlistment.Id, bookmark, MessageStatus.EnqueueWait, subqueue);
actions.Commit();
});
OnMessageQueuedForReceive(message);
lock (newMessageArrivedLock)
{
Monitor.PulseAll(newMessageArrivedLock);
}
}