Фоновые задачи в Spring (AMQP)

Мне нужно выполнить трудоемкую и подверженную ошибкам задачу (например, вызов конечной точки SOAP, которая инициирует доставку SMS) всякий раз, когда вызывается данная конечная точка моего REST API, но я бы предпочел не заставлять своих пользователей дождитесь этого, прежде чем отправлять ответ обратно. Spring AMQP уже является частью моего стека, поэтому я думаю об использовании его для создания «рабочей очереди» и наличия ряда рабочих процессов, потребляющих из очереди и заботящихся о «рабочих единицах». Однако у меня есть следующие требования:

  1. Единица работы гарантированно будет доставлена ​​и доставлена ​​ровно одному работнику.
  2. Если единица работы не может быть завершена по какой-либо причине, она должна быть помещена обратно в очередь, чтобы другой рабочий мог забрать ее позже.
  3. Рабочие единицы выдерживают перезагрузки и сбои сервера. Это обязательно, потому что я не буду использовать какую-либо БД для их хранения.

Я знаю, что RabbitMQ и Spring AMQP можно настроить таким образом, чтобы обеспечить эти три требования, но я когда-либо использовал их только для достижения RPC, поэтому я мало знаю ни о чем, кроме этого. Есть ли какой-нибудь пример, которому я мог бы последовать? На какие подводные камни стоит обратить внимание?


person Martin    schedule 29.03.2015    source источник
comment
См. руководства по Rabbitmq; Spring AMQP поддерживает все шаблоны. Контейнер слушателя обеспечит вам необходимую устойчивость.   -  person Gary Russell    schedule 30.03.2015


Ответы (1)


При создании очередей rabbitmq предоставляет вам два варианта; преходящим или устойчивым. Постоянные сообщения будут доступны до тех пор, пока вы их не подтвердите. И срок действия сообщений не истечет, если вы не укажете очереди ttl. Для начала вы можете включить плагин управления rabbitmq и немного поиграться.

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

Кластеризация Rabbitmq, и вы можете найти тему высокой доступности в правой части страницы.

Этот парень объясняет как кластеризовать< /а>

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

person mim.    schedule 29.03.2015