← Startseite
Success Story · Kotlin · AWS · Open Source

Extended Clients für Kotlin – eine Lücke im AWS-Ökosystem geschlossen

AWS bietet Extended Clients für große SQS- und SNS-Nachrichten nur für Java. Ich habe das Gegenstück für Kotlin gebaut: KI-gestützt, idiomatisch, ohne Jackson, lizenzrechtlich geprüft und auf Maven Central veröffentlicht.

Problem

Für große SQS- und SNS-Nachrichten gibt es Bibliotheken von AWS, aber nur für Java. Kotlin-Teams auf dem aws-sdk-kotlin haben kein Gegenstück.

Lösung

Drei neue Bibliotheken, die für Kotlin entworfen sind: s3overflow, sqsoverflow und snsoverflow.

Ergebnis

Etwa 730 Zeilen Kotlin statt Tausender Zeilen Java, keine Jackson-Abhängigkeit, lizenzrechtlich geprüft, getestet und auf Maven Central veröffentlicht.

~730
Zeilen Kotlin für alle drei Bibliotheken
1 Zeile
Interface-Delegation statt rund 1150 Zeilen Durchreich-Code
8 + 2
Methoden mit echter Fachlogik bei SQS und SNS
0
Jackson-Abhängigkeiten
Ausgangslage

Bewährtes Muster – aber nur für Java

Amazon SQS und SNS begrenzen die Größe einer Nachricht. Für größere Nutzlasten gibt es das Claim-Check-Muster: Die Nutzlast liegt in S3, über die Queue läuft nur ein kleiner Verweis darauf. AWS liefert das als fertige Bibliotheken – allerdings nur für das AWS SDK for Java.

Kotlin-Teams auf dem aws-sdk-kotlin müssen deshalb entweder ein zweites SDK samt Abhängigkeiten parallel betreiben oder das Muster selbst nachbauen. Dazu kommt: Die Java-Bibliotheken bringen ältere Jackson-Versionen mit, zu denen die GitHub Advisory Database sieben Sicherheitshinweise führt, drei davon als hoch eingestuft.

Entwurf

Übersetzen reicht nicht

Den Java-Code Zeile für Zeile zu übersetzen hätte funktioniert, wäre aber schlechtes Kotlin gewesen. Mein Ziel war ein Client, wie man ihn in Kotlin von Anfang an entworfen hätte.

  • Eine Klasse statt zwei. Das aws-sdk-kotlin arbeitet mit Coroutines – getrennte Klassen für synchrone und asynchrone Aufrufe sind überflüssig.
  • 1150 Zeilen Durchreich-Code entfallen. In Kotlin erledigt das die Interface-Delegation in einer einzigen Zeile.
  • Kein Jackson mehr. Den Verweis auf S3 serialisiert kotlinx.serialization – die Jackson-Hinweise betreffen diesen Code nicht.
SqsExtendedClient.kt
class SqsExtendedClient(
    private val sqsClient: SqsClient,
    private val clientConfig: SqsExtendedClientConfig,
) : SqsClient by sqsClient {
    override suspend fun sendMessage(input: SendMessageRequest): SendMessageResponse { /* ... */ }
    // + 7 weitere Methoden mit echter Fachlogik – der Rest des Interfaces
    //   wird von "by sqsClient" automatisch durchgereicht
}

SqsExtendedClient und SnsExtendedClient sind vollwertige Clients des aws-sdk-kotlin und funktionieren überall, wo ein normaler Client erwartet wird.

Arbeitsteilung

KI und Entwickler – klar verteilt

Die KI hat …
  • Code nach meinen Vorgaben geschrieben
  • Tests und Boilerplate erzeugt
  • Dokumentation vorformuliert
Ich habe …
  • die Architektur festgelegt
  • Jackson durch kotlinx.serialization ersetzt
  • jedes Projekt lizenzrechtlich bewertet
  • Grenzen festgelegt und offen dokumentiert
  • Tests, Build und Veröffentlichung abgesichert

Der Kern der drei Bibliotheken entstand an einem Nachmittag. Tests, Lizenzprüfung und Veröffentlichung kamen danach – und genau darin steckt der eigentliche Wert.

Qualität

Lizenzen, Grenzen, Tests

  • Lizenzen: s3overflow ist eine unabhängige Neuentwicklung. sqsoverflow und snsoverflow sind als abgeleitete Werke der AWS-Bibliotheken deklariert, mit Attribution in jeder Datei, wie es die Apache-2.0-Lizenz verlangt.
  • Grenzen: Die Kotlin-Clients sind nicht nachrichtenkompatibel mit den Java-Bibliotheken. Das steht offen in der Dokumentation.
  • Tests: Integrationstests prüfen das Verhalten gegen einen lokalen AWS-Emulator. Jede Veröffentlichung trägt einen signierten Herkunftsnachweis.
Ergebnis

Veröffentlicht und einsatzbereit

Alle drei Bibliotheken sind quelloffen und auf Maven Central veröffentlicht. Einbinden lassen sie sich mit einer Zeile Gradle:

build.gradle.kts
implementation("com.christoph-sens:sqsoverflow:1.1.0")

Die Java-Bibliotheken von AWS werden weiter gepflegt und bleiben für Java-Services die richtige Wahl. Die neuen Clients ersetzen sie nicht, sondern schließen eine Lücke für Kotlin.

Technische Details: Large SQS and SNS messages in Kotlin (englisch).

Für Ihr Projekt

Was das für Sie bedeutet

  • Die eigentliche Lücke erkennen, statt Symptome zu verwalten.
  • Eine Lösung für die Zielplattform entwerfen, statt fremden Code mechanisch zu übertragen.
  • KI schnell einsetzen und das Ergebnis verantworten – mit Lizenzprüfung, Tests und nachvollziehbarer Veröffentlichung.

Fehlt Ihrem Team ein Baustein, den es bisher nur für eine andere Plattform gibt? Sprechen Sie mich an.

Kontakt

Lassen Sie uns über Ihr Backend sprechen.

Schreiben Sie mir kurz, worum es geht. Ich melde mich persönlich und wir finden heraus, ob und wie ich helfen kann.

Porträt von Christoph Sens
Christoph SensIhr direkter Ansprechpartner