Надежный (долговечный) механизм распределенного каротажа
Попытка найти коммерческую структуру ведения журналов для распределенных систем. Эта структура должна позволять приложениям.NET на удаленном сервере регистрировать сообщения, которые затем могут быть собраны в центральном расположении. По возможности центральное расположение должно хранить сообщения в базе данных SQL Server.
Требования:
- Иметь возможность регистрировать сообщения на удаленном сервере, даже если перебои в сети не позволяют немедленно отправить сообщение в центральное местоположение.
- Отправка сообщений в центральное расположение должна обрабатываться процессом, отличным от того, который запускает приложение.NET, чтобы предотвратить любое снижение производительности приложений или веб-служб ASP.NET.
- Гарантированная возможная доставка сообщений в центральное местоположение. Например, в случае перезагрузки удаленного сервера в конце периода, когда сеть не отвечает, зарегистрированные сообщения все равно должны доставляться, когда удаленный сервер и нормальные условия сети восстановлены.
3 ответа
Я думаю, что вы должны быть в состоянии сделать это, используя Microsoft Enterprise Library и MSMQ из коробки. Блок приложения Entlib Logging имеет встроенный прослушиватель MSMQ. В то время как мы использовали журналирование Entlib в нескольких проектах, я лично не использовал службу дистрибьютора MSMQ.
Вероятно, действительно простым решением может быть продолжение записи локальных журналов и создание отдельного процесса для повторной публикации журнала на сервере. Вы можете опубликовать журнал, используя несколько параметров, включая шину сообщений подписки публикации, такую как MassTransit или msmq.
Использование другого решения, такого как написание конкретного адаптера log4net, безусловно, вариант, но он может повлечь проблемы со связыванием / зависимостями, поэтому принятие должно учитывать фактическую среду развертывания.