Один хороший способ добиться того, что вам нужно, - использовать шаблон проектирования автоматического выключателя.
Я впервые прочитал об этом в книге «Отпустите это! Разработка и развертывание готового программного обеспечения для производства» Майкла Т. Найгарда из Pragmatic Press, p104-107.
Идея выключателя заключается в том, что он находится на пути соединения между системами, проходя через соединения, наблюдая за «условием прерывания». Например, он может срабатывать только в том случае, если все пять соединений в строке не сработали.
После того, как цепь сломалась, все вызовы через автоматический выключатель немедленно прекращаются, не обращаясь к внешней службе. Это продолжается до тех пор, пока не произойдет тайм-аут, когда прерыватель переходит в полуоткрытое состояние. Выполняется следующий вызов - отказ приводит к сбросу таймаута, успеху в закрытии выключателя и возобновлению работы системы.
Быстро найденный google a post by Tim Ross, который хорошо читается и более подробно освещен.
В вашем случае вы можете использовать автоматический выключатель с таймаутом 10 минут и триггер из 5 отказов. Тогда ваши файлы журналов будут содержать в случае сбоя за весь день пять исключений, зарегистрированных для исходной проблемы, а затем всего шесть часов в час (по сравнению с 240 с интервалом 15 секунд), что указывает на то, что проблема сохраняется.
В зависимости от ваших требований вы можете включить ручной «сброс» выключателя, или вы можете просто оставить его для автоматического сброса, когда 10-минутный тайм-аут покажет, что все вернулось в норму. Это может быть полезно - как правило, чем меньше проблем с системными администраторами, тем лучше им это нравится.
приятный ответ, очень хорошо поставленный и удобный паттерн для вашего словаря – dove 2008-10-30 09:31:51