Краткий ответ: Нет правильного способа сделать это.
Длинный ответ: Поскольку нет правильного способа сделать это, есть опасность, что любой ответ, который я дам вам, будет мнением.Вместо того, чтобы сделать это, я собираюсь помочь прояснить последствия каждого предложенного вами варианта.
Первое, на что следует обратить внимание: Если на момент запроса HTTP уже не было изображения, ваш ответ HTTP не сможет включать изображение.Это означает, что ваш интерфейс необходимо будет обновить после завершения цикла HTTP-запроса / ответа.Есть два способа сделать это: опрос через запросы AJAX или проталкивание через сокеты.
Преимущество опроса заключается в том, что его легче интегрировать в существующее веб-приложение.Преимущество передачи изображения клиенту через сокеты состоит в том, что клиенту не нужно спамить ваш сервер с помощью запросов на опрос.
Второе, что следует отметить: Сообщение об изображении изРаботники разброса / сбора могут происходить либо через конечную точку HTTP, либо через очередь сообщений, как вы предлагаете.
Преимущество конечной точки HTTP состоит в том, что она, вероятно, будет проще в настройке.Преимущество очереди сообщений заключается в том, что работнику не нужно ждать ответа HTTP (который может занять некоторое время, если вы записываете большой файл изображения на диск), прежде чем переходить к следующему заданию.
Еще одна вещь, на которую следует обратить внимание: Если вы решите использовать конечную точку HTTP для создания / обновления изображений, вполне возможно, что несколько сотрудников разброса / сбора попытаются сделать это нав то же время.Вам нужно будет обработать это, чтобы предотвратить одновременную запись в один файл несколькими рабочими.Вы можете справиться с этим, используя мьютекс для блокировки файла, пока один процесс пишет в него.Если вы решите использовать очередь сообщений, у вас будет несколько вариантов решения этой проблемы: вы можете использовать мьютекс, или вы можете использовать очередь FIFO, которая гарантирует порядок выполнения, или вы можете ограничить число работников вочередь к одному, чтобы предотвратить параллелизм.
У меня есть опыт работы с подобной системой.Моя команда и я решили использовать очередь сообщений.Это хорошо сработало для нас, учитывая наши ограничения.Но, в конечном счете, вам нужно решить, что будет работать лучше для вас, учитывая ваши ограничения.
РЕДАКТИРОВАТЬ
Ограничения, которые мы учитывали при выборе очереди сообщений по HTTPвключено:
- Не желая добавлять частные конечные точки в общедоступное веб-приложение
- Не желая задерживать работника в ожидании HTTP-запроса / ответа
- Не желая делать синхронным то, что было асинхронным
Возможно, были и другие причины.Это те, которые я помню с макушки головы.