Do integracji zewnętrznych usług w architekturze IT coraz częściej wykorzystuje się szynę komunikacyjną (np. RabbitMQ, Apache Kafka lub NATS). Takie podejście umożliwia realizację asynchronicznej interakcji, zmniejszenie powiązań między systemami oraz zwiększenie odporności na awarie.
Realizacja opiera się na następujących krokach:
Przykład wysyłania zdarzenia do Kafki w Javie:
ProducerRecord<String, String> record = new ProducerRecord<>("events.orders", "orderCreated", jsonOrderData); producer.send(record);
Kluczowe cechy:
Czy korzystanie z szyny komunikacyjnej gwarantuje brak utraty danych?
Odpowiedź: Nie. Należy osobno skonfigurować polityki dostarczania (acknowledgment, persystencja wiadomości), a czasami również obejść ograniczenia brokera (np. w przypadku awarii sieci lub przepełnienia kolejek).
Czy wszystkie wysłane wiadomości muszą być przetwarzane w kolejności, w jakiej przychodzą?
Odpowiedź: Nie zawsze. Gwarantowanie porządku jest możliwe, ale może obniżyć wydajność. W niektórych przypadkach kolejność przetwarzania nie jest ważna, a lepiej wykorzystać asynchroniczne równoległe pobieranie.
Czy wystarczy dodać wsparcie dla kolejki komunikatów w usłudze, aby skalować integrację?
Odpowiedź: Nie. Aby skalować, należy przemyśleć partycjonowanie (podział na shard'y), subskrypcję grupową i równoważenie obciążenia konsumentów, aby zapewnić równomierne obciążenie.