Как мое приложение структурировано node.js-сервер отправляет данные работнику-питону, который затем запускает незанятый скрипт. Каким будет подход, который заставит сервер node.js в дальнейшем остановить сценарий и снова сделать рабочий доступ из очереди?Как мне остановить средний скрипт для rabbitmq?
ответ
Секрет, чтобы остановить потребителей от производителей, как правило, иметь сообщение яд.
Некоторые делают это через несколько очередей, а некоторые через выделенное сообщение понимают вниз, чтобы прекратить потребление (последний работает только с одним рабочим).
В основном, когда ваш скрипт python видит ядовитое сообщение, он немедленно отключается. Причина, по которой вы можете захотеть этого в отдельной очереди, - это, возможно, потребуется передать сообщение, если у вас есть несколько сотрудников, поэтому вам потребуется отдельная очередь для каждого работника.
В начале сценария, возможно, лучше всего оставить рабочих и заставить их ждать сообщения перезагрузки.
В противном случае вы можете сделать наблюдателя или контроллера, который принимает сообщения и управляет процессами, такими как перезапуск скрипта python, но это довольно сложно.
Я считаю, что сельдерей делает это много, если вы ищете что-то преднамеренное.
EDIT - ядовитое сообщение, возможно, уже означает что-то еще в AMQP. Я имею в виду ваше собственное ядовитое сообщение.
Поскольку вы хотите что-то убить во время его работы, вам придется делать это вещательным способом.
Для каждого потребителя у вас на самом деле есть два потребителя на сценарий python.
Один, чтобы принять фактические данные и один для приема команд для запуска и остановки потребителя данных.
Если вы хотите начать, вы могли бы широковещательное послание (JSON, но вы можете использовать любой формат, который вы любите или вы можете также использовать AMQP свойство заголовка, а)):
{
"command" : "start"
}
Если вы хотите остановить ваш производитель может отправить сообщение как:
{
"command": "stop"
}
Ваш потребитель обратный вызов будет видеть, если message.command == 'stop'
.
Как только вы видите это сообщение, вы вызываете channel.basicCancel(consumerTag)
на потребителя, который фактически принимает данные, а также фактически убивает то, что в настоящее время работает. Убийство, которое в настоящее время работает, сильно зависит от вашей установки, поэтому я не могу вникать в это, потому что это может быть отдельный процесс, или это может быть отдельный поток или событие, если вы используете какой-либо механизм событий. Убивать длительные процессы по своей сути сложно.
Каждый скрипт python должен иметь эксклюзивную очередь для пользователя команды, если используется обмен темами, или вы можете использовать обмен разветвителем (aka broadcast).
Потребитель данных будет делиться очередью со всеми другими скриптами.
Вы можете рассмотреть возможность использования пакета, такого как сельдерей, для управления этим с помощью RabbitMQ в качестве вашего брокера. Сельдерей имеет функцию revoke()
, которая может использоваться для завершения задачи.
>> from celery.task.control import revoke
>> revoke(task_id, terminate=True)
Поскольку это звучит, как вы хотите, чтобы остановить задачу уже в процессе - запрос фальшренонса с возможностью прекратить установлен в True, будет прекращен уже выполняющаяся задача. По умолчанию это значение неверно.
Для справки: http://docs.celeryproject.org/en/latest/userguide/workers.html#commands
- 1. Как остановить серверы rabbitmq
- 2. Как остановить/остановить/остановить скрипт в R?
- 3. Как остановить скрипт завитки?
- 4. Как остановить скрипт python
- 5. Как остановить сервер RabbitMQ на localhost
- 6. Как остановить сервер rabbitmq на окнах 7
- 7. Как остановить анимацию «средний поток» и отменить ее?
- 8. Как я постоянно выполняю скрипт клиента rabbitmq?
- 9. Как остановить скрипт JavaScript iMacros?
- 10. Как мне настроить этот средний образ?
- 11. как остановить скрипт от работы
- 12. Как остановить скрипт PHP навсегда?
- 13. Как остановить запущенный скрипт python
- 14. Как остановить скрипт с ложью?
- 15. Скользящий средний/средний средний
- 16. Как мне группировать потребителей в RabbitMQ?
- 17. Как мне (интеграция) test @StreamListener с RabbitMQ?
- 18. Остановить кластерный индексный скрипт
- 19. средний средний и средний средний для f-меры для задачи многоклассификации
- 20. Остановить очередь прослушивания RabbitMQ с помощью java
- 21. Остановить скрипт в Matlab
- 22. Movin Средний скрипт в скрипте matlab для программы C
- 23. Как остановить мой скрипт от цикла
- 24. Как остановить процесс, выполняющий определенный скрипт Python?
- 25. Помогите мне оптимизировать этот средний расчет snippet
- 26. Как остановить приложение Java, используя скрипт
- 27. Мне нужно остановить theBox
- 28. Jython Как остановить скрипт из потока?
- 29. Как остановить скрипт, когда «if» is false
- 30. Как остановить скрипт R gWidgets, выходящий
Из всего, что я поднял, кажется, что ядовитое сообщение - это когда потребитель не может обработать сообщение. Как это поможет потребителю остановиться? Потребитель даже не получит это сообщение, потому что он уже обрабатывает текущий скрипт, нет? – joe
Прошу прощения, что я сказал ядовитое сообщение, поскольку, возможно, есть официальное ядовитое сообщение AMQP. Термин перегружен. То, что я подразумеваю под ядовитым сообщением, - это настраиваемое сообщение, которое вы создаете на своем конце, которое сигнализирует о завершении. –