В моем приложении есть сделки и мне нужно каждые 3 часа проверять все сделки с статусом "Ожидает оплаты", пришла ли оплата или нет(я сам кошелек проверяю) и, если оплата не пришла, то менять статус на "Отменен", если пришла оплата.
У меня скажем так проблема в реализации:
1) сделать с помощью Worker Pool, которому я буду передавать массив данных для проверки, а он проверяет
2) сделать с помощью RabbitMQ, которому опять же я буду передавать массив данных для проверки, а он проверяет (Уточню, что RabbitMQ уже используется в проекте и я его тащу не ради этого)
И как лучше будет запустить фоновый процесс, который каждые 3 часа будет получать массив сделок с статусом "Отменен"?
Могу предложить такой вариант:
Одна горутина для периодического запуска функции по отправке множества заданий в очередь RabbitMQ по проверке сделок, по заданию на каждую сделку. В случае сбоя в горутине, остановится цикл периодического запуска проверок состояния сделок. Или, если есть опасения насчет стабильности работы сервиса, то надежнее делегировать запуск функции планировщику задач.
И реализовать потребителя очереди заданий проверки сделок в RabbitMQ. В задании достаточно указывать идентификатор сделки.
RabbitMQ самостоятельно не сможет проверить, в любом случае нужен будет consumer.
Вам можно реализовать с помощью внутренней очереди.
В main.go запускать два сервиса, один кидает в очередь задания, второй их считывает и обрабатывает. Таким образом они будут наименее связаны с друг другом и легко покроются тестами.