Знакомство с RabbitMQ
RabbitMQ — брокер сообщений, классическая очередь в более привычном виде, чем Kafka — сообщение доставляется и удаляется, а не хранится журналом (см. тему «Topic» для сравнения подхода Kafka).
@Component
class OrderListener {
@RabbitListener(queues = "orders")
void handleOrder(Order order) {
sendConfirmationEmail(order);
}
}
@Service
class OrderService {
private final RabbitTemplate rabbitTemplate;
void createOrder(Order order) {
rabbitTemplate.convertAndSend("orders", order);
}
}
Копнуть глубже
Главное концептуальное отличие от Kafka. В RabbitMQ сообщение, как только его подтвердил (ack) consumer, удаляется из очереди — оно предназначено одному получателю. Если нужно, чтобы несколько разных сервисов получили одно и то же сообщение, в RabbitMQ для этого используется отдельный механизм (fanout exchange, см. тему «Exchange, Queue, Binding») — в отличие от Kafka, где это естественное поведение топика (несколько Consumer Group читают независимо).
RabbitMQ проще для классических задач очередей — задачи на обработку (отправить письмо, сгенерировать отчёт), где порядок не критичен и не нужна история сообщений. Реализует протокол AMQP — открытый стандарт обмена сообщениями.
• чем модель RabbitMQ (удаление после получения) отличается от Kafka (журнал) (если дошёл до 2-го слоя).