2014-01-17 4 views
2

Есть ли способ определить, работает ли процесс в настоящее время и определить, как долго он запускается при его запуске?Мониторинг запроса java

Скажем, например, я делаю вызов веб-службы/веб-приложения методу с именем getFirstName(), который имеет вызов в базу данных для получения имен. Перед этим у меня есть AOP советчик methodinterceptor, который перехватит метод getFirstName(). Теперь в перехватчике я буду замечать время начала этого запроса, а затем перейти к фактическому методу, теперь мне нужно вызвать почту пользователю, если запрос был запущен в течение длительного времени. Как мне отслеживать это запросить время? Я не хочу использовать нить, чтобы избежать сложности, есть ли простой способ сделать это?

Спасибо!

+0

Кому вы хотите выслать электронное письмо с запросом слишком долго? –

+0

Так или иначе вам придется использовать другой поток (или внешний субъект), чтобы что-то сделать для вас, иначе вы будете блокировать до тех пор, пока метод 'getFirstName()' не вернется. – Durandal

+0

Просто информационная почта для команды dba/мониторинга, в которой говорится, что этот запрос занимает больше времени, чем ожидалось. BTW, у меня будет пороговое значение, определенное в моем приложении. – Faz

ответ

0

Вы можете использовать Quartz для запуска evente каждые 10 секунд или около того. Там вам нужно будет проверить карту или что-то в ваших процессах и когда они начнутся. Сделайте расчет (сейчас() - startTime()) и отправьте письмо, если вам нужно.

3

Вы можете организовать его самостоятельно. В getFirstName() у вас
есть последовательность действий/действий.

Либо

1) getFirstName() должен как-то опрашивать свой статус (потому что
вы сказали, что вы не хотите другой процесс/нить, чтобы контролировать его). Но это
звучит странно и сложнее. Кроме того, у этой проблемы есть проблема: если
getFirstName() вызывает некоторую длительную операцию, то опрос будет
не работает (поскольку getFirstName() занят чем-то другим в настоящее время).


или

2)
Другой процесс/нить может проверить состояние getFirstName() процессов.
Если статус не СОВЕРШЕН, и прошло некоторое приличное количество времени,
отправит электронное письмо. Ответ getFirstName()
- это просто установить статус DONE после его завершения и НАЧАТЬ
после его начала. Кроме того, каждый вызов getFirstName(), вероятно, должен иметь
уникальный идентификатор. Это в основном это.

+0

Спасибо, я говорю о 500-1000 запросах в день, поскольку это будет широко используемый сервис. Как вы думаете, будет ли оптимальное решение иметь другой поток параллельно каждому запущенному процессу? – Faz

+2

@Faz Нет, нет. Вам нужна только одна нить монитора. Не один поток на вызов getFirstName(), а один поток монитора, который всегда будет работать на фоне. Он просто запросит таблицу DB, например. и отправлять электронные письма. Процессы getFirstName()/процессы будут сообщать о своих достижениях в эту таблицу. Вот и все, довольно просто. И 500-1000 звонков в день не так уж много;) –

+0

okie получил тот момент. У меня уже есть таблица, в которой сообщается о состоянии запроса, я думаю, что он хорош там. Но действительно не уверен, как я создам поток в моем методе АОП. Я совершенно новый для этой концепции потока, не могли бы вы помочь мне с примером? – Faz

Смежные вопросы