public Guid RegisterToSend(Endpoint destination, string queue, string subQueue, MessagePayload payload, Guid transactionId)
{
var bookmark = new MessageBookmark();
var msgId = GuidCombGenerator.Generate();
using (var update = new Update(session, outgoing, JET_prep.Insert))
{
Api.SetColumn(session, outgoing, ColumnsInformation.OutgoingColumns["msg_id"], msgId.ToByteArray());
Api.SetColumn(session, outgoing, ColumnsInformation.OutgoingColumns["tx_id"], transactionId.ToByteArray());
Api.SetColumn(session, outgoing, ColumnsInformation.OutgoingColumns["address"], destination.Host, Encoding.Unicode);
Api.SetColumn(session, outgoing, ColumnsInformation.OutgoingColumns["port"], destination.Port);
Api.SetColumn(session, outgoing, ColumnsInformation.OutgoingColumns["time_to_send"], DateTime.Now.ToOADate());
Api.SetColumn(session, outgoing, ColumnsInformation.OutgoingColumns["sent_at"], DateTime.Now.ToOADate());
Api.SetColumn(session, outgoing, ColumnsInformation.OutgoingColumns["send_status"], (int)OutgoingMessageStatus.NotReady);
Api.SetColumn(session, outgoing, ColumnsInformation.OutgoingColumns["queue"], queue, Encoding.Unicode);
Api.SetColumn(session, outgoing, ColumnsInformation.OutgoingColumns["subqueue"], subQueue, Encoding.Unicode);
Api.SetColumn(session, outgoing, ColumnsInformation.OutgoingColumns["headers"], payload.Headers.ToQueryString(),
Encoding.Unicode);
Api.SetColumn(session, outgoing, ColumnsInformation.OutgoingColumns["data"], payload.Data);
Api.SetColumn(session, outgoing, ColumnsInformation.OutgoingColumns["number_of_retries"], 1);
Api.SetColumn(session, outgoing, ColumnsInformation.OutgoingColumns["size_of_data"], payload.Data.Length);
if (payload.DeliverBy != null)
Api.SetColumn(session, outgoing, ColumnsInformation.OutgoingColumns["deliver_by"], payload.DeliverBy.Value.ToOADate());
if (payload.MaxAttempts != null)
Api.SetColumn(session, outgoing, ColumnsInformation.OutgoingColumns["max_attempts"], payload.MaxAttempts.Value);
update.Save(bookmark.Bookmark, bookmark.Size, out bookmark.Size);
}
Api.JetGotoBookmark(session, outgoing, bookmark.Bookmark, bookmark.Size);
logger.DebugFormat("Created output message '{0}' for 'rhino.queues://{1}:{2}/{3}/{4}' as NotReady",
msgId,
destination.Host,
destination.Port,
queue,
subQueue
);
return msgId;
}