Nano Hash - криптовалюты, майнинг, программирование

Может ли worker отправить сообщение обратно производителю

У меня есть приложение NodeJS со следующей ситуацией: я получаю запрос от пользователя на вычисление чего-то, что требует использования очень сложной математической формулы. В настоящее время я запускаю весь этот процесс в этот момент, вычисляю значение, а затем отправляю его обратно пользователю. К сожалению, это не очень удобно для асинхронности :)

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

Я просматривал различные очереди заданий, в том числе Kue, Celery, Resque и Beanstalk, но ни один из них не предоставляет эту функцию. Они отлично работают для таких вещей, как отправка электронных писем или выполнение любого вида работы, которая не требует получения какой-либо ценности обратно, просто ясно, было ли это успешным или нет, но, похоже, нет ничего, что позволяло бы worker, чтобы фактически отправить пользовательское сообщение обратно исходному производителю, создавшему задачу.

Я ошибаюсь, говоря, что ни одна из упомянутых выше очередей не поддерживает это? Если да, укажите, где в документации я могу узнать об использовании этой функции. В противном случае, не могли бы вы указать мне какие-либо другие, которые поддерживают эту функцию?


Ответы:


1

Вы должны получать результаты из выделенной очереди, а затем отправлять их пользователю.
Используйте сельдерей в качестве диспетчера очередей задач и длинный опрос или сокет для возврата результатов операций пользователю.
Из приложения nodeJS вы можете использовать узел -celery https://github.com/mher/node-celery или вставлять сообщения непосредственно в зарезервированная очередь сельдерея.
например,

var amqp = require('amqp');
var connection = amqp.createConnection({
  host: 'localhost',
  port: 5672
});
connection.on('ready',function(){
  connection.publish('celery', {id:uuid.v4(), task:'yourapp.tasks.usefultask', args:['firstArg','secondArg'], kwargs:{}},{
      'contentType': 'application/json'
      });
    });
29.09.2013

2

Вы можете использовать Celery с https://github.com/mher/node-celery.

node-celery позволяет ставить задачи в очередь и получать результат выполнения

var celery = require('node-celery'),
    client = celery.createClient({
        CELERY_BROKER_URL: 'amqp://guest:guest@localhost:5672//',
        CELERY_RESULT_BACKEND: 'amqp'
    });

client.on('connect', function() {
    client.call('factorial', [1000000], function(result) {
        console.log(result);
    });
});
24.06.2013
  • Как эти поставленные в очередь задачи будут обрабатываться @mher? Я видел документацию node-celery, очень сложно понять, что происходит. Какая функция в node-celery потребляет сообщения и обрабатывает задачи? 15.07.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..