from the queue are taken and reports are sent to the server No. 1 to check and record
Yeah, this is the place where is decided, offline server # 1 or online.
Because the server is No. 1 takes consistently
And this is the main requirement.
Option number 1.
A common place one worker. If the server No. 1 is offline, the worker just stops running as long as the server returns. For the current message it is necessary to perform amqp reject, then it will return to the beginning of the queue.
The order of messages observed, but there is a single point of failure, it is also the bottleneck of performance (however, depends on the speed of report processing)
Option # 2.
A common place, a lot of workerb. The scheme is the same, the server is offline, the processing stops. Online renewal. The bottleneck in performance and point of failure away, but two consecutive report from one of the computers can get simultaneously on adjacent worker, i.e., the requirement about "consistently" may not work.
Option # 3.
HashRing and other hashing algorithms that allow to reduce the number of queues and each queue to hang your worker. The need for manual load balancing, no single point of failure on a separate line.
Something like that. Immediately figure out how to get some workarou to process a single turn, preserving the order of messages, I figured it out.