У меня есть начинающий рабочий. Он выполняет некоторые инициализации. Я хочу, чтобы другие рабочие дождались этого стартового рабочего. Единственный способ, на мой взгляд, - ставить сообщения в очередь. Рабочие будут опрашивать очередь. Они начнутся после прочтения сообщений. Есть ли лучший способ синхронизации?
Связь с рабочей ролью Azure
Ответы (1)
Проблема с опросом очереди: как только один работник увидит сообщение очереди «Я готов», что произойдет с другими работниками? Если читатель удалит сообщение из очереди (как и должно быть), другие никогда его не увидят. Если читатель не удалит его, то это сообщение останется там до конца времени (и в следующий раз, когда вы загрузитесь, сообщение все еще там).
Что, если вы разместили очень простую службу wcf в экземпляре загружаемой рабочей роли с методом AreYouRunning(), возвращающим true/false? Если экземпляр все еще находится в OnStart(), вы не сможете подключиться к службе. После подключения вы просто проверяете возвращаемое значение. Вам просто нужны ваши другие роли, чтобы настроить какой-то тип механизма опроса в их OnStart() или Run() для периодического опроса.
Вероятно, есть и другие способы сделать это, например, создать строку в таблице Azure. Вам все равно нужно убедиться, что вы можете очистить статус «работает» из этой таблицы до запуска других ролей, поэтому идея службы wcf может лучше удовлетворить ваши потребности.