В сложной логической системе, системе с объемными вычислительными задачами и потоками событий необходимо организовать распределенную архитектуру и наладить коммуникацию между ее компонентами.
Для такой архитектуры чаще всего используют одно из двух решений: RabbitMQ или Apache Kafka. Разберемся, чем отличаются эти брокеры сообщений и в каких случаях какой использовать.
Что такое RabbitMQ
RabbitMQ — это распределенный и горизонтально масштабируемый брокер сообщений. Он позволяет разным программам взаимодействовать с помощью протокола AMQP, а через дополнительные модули — и с помощью некоторых других протоколов: MQTT, HTTP и так далее.
Устройство брокера упрощенно можно описать так:
- есть продюсер, или поставщик сообщений, отправляющий события;
- очередь сообщений — своего рода «почтовый ящик», где хранятся сообщения;
- подписчики, то есть программы — получатели сообщений.
В очереди может храниться любое количество сообщений от неограниченного количества поставщиков, а получать их может неограниченное число подписчиков.
RabbitMQ принимает сообщения от поставщиков и отправляет им подтверждение о приеме, а затем перенаправляет их подписчикам. Получатели подтверждают, что сообщение доставлено, либо сигнализируют о неудаче. Во втором случае сообщение остается в очереди, пока не будет доставлено. А после доставки оно удалится из системы.