Поскольку NServiceBus, похоже, не поддерживает добавление механизма приоритетов в очередь сообщений, я хочу реализовать это сам.
- Командный обработчик (Производитель):
public void Handle(DoAnAction message)
{
_messageManager.Insert(message);
}
- Один потребитель (другая нить):
public void Run()
{
DoAnAction message;
while (true)
{
if (_messageManager.TryDequeue(out message))
{
doALongCall(message);
}
else
{
Thread.sleep(200);
}
}
}
Это даже хорошая идея для начала? Мне не нравится идея, что я могу потерять сообщения таким образом.
Обновление : вариант использования: у нас много клиентов, которые могут отправить сообщение DoAnAction. Обработка этого действия занимает некоторое время. Проблема в том, что когда один клиент решает отправить 200 DoAnActions, все остальные клиенты должны ждать 2-3 часа, чтобы все эти сообщения могли быть обработаны (FIFO).
Вместо этого я хотел бы обработать эти сообщения в порядке, основанном на клиенте.
Таким образом, даже если клиент A все еще имеет 200 сообщений для обработки, когда клиент B отправит сообщение, он будет поставлен в очередь следующим.
Если клиент B отправит 3 сообщения, очередь будет выглядеть следующим образом:
B-A, B-A, B-A, A, A, A, ...