2016-09-23 3 views
1

Я работаю над приложением, где у меня несколько серверов на разных машинах, которые выполняют длительные операции для меня. На этих машинах есть служба Windows, написанная с помощью hangfire/topshelf. За один раз на одну машину может работать только одна операция. Кроме того, я хочу периодически выполнять задания проверки состояния и очистки на каждом сервере, поэтому я не могу просто ставить их в очередь на работу.Hangfire с несколькими серверами

Есть ли способ сделать это в мешках? Кроме того, есть ли способ отправить последующее задание на тот же сервер, что и более ранняя работа?

ADD-ON: Я знаю, что одна из возможностей заключается в добавлении еще одного слоя hangfire: сделайте каждую из услуг клиентом hangfire с собственной БД и обслуживайте себя, а затем планируйте для них повторяющиеся задания, но это кажется ужасно сложным - особенно при масштабировании и добавлении серверов.

+0

Hangfire реализован как очередь, и будет назначать только один сервер на одно задание, поэтому не нужно беспокоиться об этом. Однако нет возможности установить близость к определенному серверу AFAIK. Вам нужно будет координировать работу в вашем приложении, возможно, используя распределенный кеш или уровень ключа/значения. – HackedByChinese

+0

@HackedByChinese: Я знаю, что это только один сервер на работу. Мне нужно это наоборот, одно задание на сервер. Это я могу сделать с WorkerCount. Но потом есть задания, которые я хочу периодически запускать на каждом сервере, потому что они делают очистку на сервере ... – EluciusFTW

ответ

0

Если ваша задача - запустить запланированную задачу на каждом сервере, я думаю, лучший вариант - реализовать ее самостоятельно, Hangfire не поддерживает обработку событий, а только обработку команд. Я думаю, вы достигли точки возможностей Hangfire и должны переключиться на более мощный и общий инструмент.

Для событий и их обработки вы можете использовать другие системы, например RabbitMQ. Вы просто указываете генератор событий и подписываетесь на все свои компьютеры для этого события.

+0

Отправить/Прослушать события через Интернет? Машины не находятся в локальной сети! – EluciusFTW

+0

Они могут быть везде. В «Кролике» реализована очень концепция событий и их обработка. Итак, да, вы можете подписаться на интернет. Прочитайте это: https://www.rabbitmq.com/tutorials/tutorial-three-dotnet.html – eocron

+0

Я не уверен, что хочу реализовать другой внешний инструмент на данный момент, но спасибо за предложение! Если я не найду никакого способа с огнем, я, возможно, буду вынужден. – EluciusFTW

0

Я знаю, что это немного поздно, но способ, которым мы справляемся с этим, - просто написать простое консольное приложение и запланировать его с помощью Планировщика задач Windows.

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