Voor de integratie van externe services in IT-architectuur wordt steeds vaker een berichtenbus gebruikt (bijvoorbeeld RabbitMQ, Apache Kafka of NATS). Deze aanpak maakt asynchrone interactie mogelijk, vermindert de afhankelijkheid tussen systemen en verhoogt de fouttolerantie.
De implementatie is opgebouwd uit de volgende stappen:
Voorbeeld van het verzenden van een gebeurtenis naar Kafka in Java:
ProducerRecord<String, String> record = new ProducerRecord<>("events.orders", "orderCreated", jsonOrderData); producer.send(record);
Belangrijke kenmerken:
Garandeert het gebruik van een berichtenbus dat er geen gegevensverlies is?
Antwoord: Nee. Het is noodzakelijk om leveringsbeleid (erkenning, persistentie van berichten) apart in te stellen, en soms moeten zelfs beperkingen van de broker worden omzeild (bijvoorbeeld netwerkstoringen of het overbelasten van wachtrijen).
Moeten alle verzonden berichten noodzakelijkerwijs in volgorde worden verwerkt zoals ze zijn ontvangen?
Antwoord: Niet altijd. Volgorde kan worden gegarandeerd, maar dit kan de prestaties verminderen. In sommige gevallen is de volgorde van verwerking niet belangrijk, en is het beter om gebruik te maken van asynchrone parallelle consumptie.
Is het voldoende om alleen ondersteuning voor een berichtenwachtrij aan een service toe te voegen voor de schaalbaarheid van de integratie?
Antwoord: Nee. Voor schaalbaarheid moeten partitionering (scheiding in shards), groepsabonnement en consumentenbalans voor een evenwichtige belasting worden doordacht.