Мне нужно обрабатывать трудоемкую и подверженную ошибкам задачу (например, вызывать конечную точку SOAP, которая будет запускать доставку SMS) всякий раз, когда вызывается определенная конечная точка моего REST API, но я бы предпочел, чтобы мои пользователи не дождались этого, прежде чем отправлять ответ. Spring AMQP уже является частью моего стека, поэтому я хотел бы использовать его для создания «рабочей очереди» и иметь несколько рабочих процессов, потребляющих из очереди и занимающихся «рабочими единицами». Однако у меня есть следующие требования:Фоновые задачи весной (AMQP)
- Гарантируется, что рабочее устройство будет доставлено и доставлено ровно одному работнику.
- Если рабочий блок не может быть завершен по какой-либо причине, он должен быть помещен обратно в очередь, чтобы другой рабочий мог его забрать позже.
- Рабочие устройства выживают при перезагрузке сервера и сбоях. Это обязательно, потому что я не буду использовать БД любого типа для их хранения.
Я знаю, что RabbitMQ и Spring AMQP могут быть настроены таким образом, чтобы обеспечить эти три требования, но я использовал их только для достижения RPC, поэтому я не знаю ничего о чем-либо кроме этого. Есть ли какой-нибудь пример, который я мог бы выполнить? Каковы некоторые подводные камни, на которые нужно следить?
См. [Учебники по кроликам] (https://www.rabbitmq.com/getstarted.html); Spring AMQP поддерживает все шаблоны. Контейнер-слушатель даст вам необходимую устойчивость. –