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.
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.
Drei neue Bibliotheken, die für Kotlin entworfen sind: s3overflow, sqsoverflow und snsoverflow.
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
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.
Ü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.
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.
KI und Entwickler – klar verteilt
- Code nach meinen Vorgaben geschrieben
- Tests und Boilerplate erzeugt
- Dokumentation vorformuliert
- 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.
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.
Veröffentlicht und einsatzbereit
Alle drei Bibliotheken sind quelloffen und auf Maven Central veröffentlicht. Einbinden lassen sie sich mit einer Zeile Gradle:
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).
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.
