#c# #sql #service #network-programming #message-queue
#c# #sql #Обслуживание #сетевое программирование #очередь сообщений
Вопрос:
Мне нужно реализовать постоянную очередь в моей службе C #. Он опрашивает данные из внешнего источника. После того, как он получил единицу данных, он должен отправить ее на сервер. Если отправка завершается неудачно, он должен записать ее на диск в порядке очереди и попытаться повторно отправить ее с интервалом, но также продолжать опрашивать данные и, таким образом, продолжать заполнять очередь. Мне нужно сохранить его на диск, потому что сеть может выйти из строя, а сервер может быть отключен. В результате перезапуск службы и, следовательно, удаление очереди в памяти. (Конечно, во время перезагрузки опрос не будет производиться, но данные во время сбоя сети ранее будут потеряны).
Теперь я решил эту проблему, внедрив очередь в Sql CE. После опроса данных он напрямую записывает их в базу данных sql ce, затем другой поток считывает (просматривает) базу данных и пытается отправить данные. Если ему удалось отправить его, сообщение удаляется из очереди. Я чувствую, что это решение довольно тяжелое и не очень эффективное.
Есть ли у кого-нибудь опыт работы с подобным сценарием и советы по его лучшей реализации?
Комментарии:
1. Вы рассматривали MSMQ ?
2. Вы могли бы использовать
RabbitMq
. Существует отличная библиотека для C#:EasyNetQ
3. Я не хочу устанавливать какое-либо «другое» программное обеспечение. Мне нужно иметь возможность включить его в свой сервис, это возможно? Будут ли эти инструменты быстрее, чем Sql CE?