Extended clients para Kotlin – cerrando un hueco en el ecosistema de AWS
AWS ofrece extended clients para mensajes grandes de SQS y SNS solo para Java. Construí la contraparte para Kotlin: con apoyo de IA, idiomática, sin Jackson, con licencias revisadas y publicada en Maven Central.
AWS ofrece librerías para mensajes grandes de SQS y SNS, pero solo para Java. Los equipos de Kotlin que usan aws-sdk-kotlin no tienen equivalente.
Tres nuevas librerías diseñadas para Kotlin: s3overflow, sqsoverflow y snsoverflow.
Unas 730 líneas de Kotlin en lugar de miles de líneas de Java, sin dependencia de Jackson, con licencias revisadas, con tests y publicadas en Maven Central.
- ~730
- líneas de Kotlin para las tres librerías
- 1 línea
- de delegación de interfaz en lugar de ~1150 líneas de código de reenvío
- 8 + 2
- métodos con lógica real en SQS y SNS
- 0
- dependencias de Jackson
Un patrón probado – pero solo para Java
Amazon SQS y SNS limitan el tamaño de un mensaje. Para payloads más grandes existe el patrón claim-check: el payload se guarda en S3 y por la cola solo viaja una pequeña referencia. AWS lo ofrece como librerías listas para usar – pero solo para el AWS SDK for Java.
Por eso, los equipos de Kotlin que usan aws-sdk-kotlin o bien mantienen en paralelo un segundo SDK con todas sus dependencias, o bien reconstruyen el patrón por su cuenta. Además, las librerías Java arrastran versiones antiguas de Jackson para las que la GitHub Advisory Database registra siete avisos de seguridad, tres de ellos de gravedad alta.
Traducir no basta
Traducir el código Java línea por línea habría funcionado, pero habría sido mal Kotlin. Mi objetivo era un cliente diseñado como se diseñaría en Kotlin desde el principio.
- Una clase en lugar de dos. aws-sdk-kotlin se basa en corrutinas – no hacen falta clases separadas para llamadas síncronas y asíncronas.
- Desaparecen 1150 líneas de código de reenvío. En Kotlin, la delegación de interfaces lo resuelve en una sola línea.
- Adiós a Jackson. kotlinx.serialization serializa la referencia a S3 – los avisos de seguridad de Jackson no afectan a este código.
class SqsExtendedClient( private val sqsClient: SqsClient, private val clientConfig: SqsExtendedClientConfig, ) : SqsClient by sqsClient { override suspend fun sendMessage(input: SendMessageRequest): SendMessageResponse { /* ... */ } // + 7 métodos más con lógica real – el resto de la interfaz // se reenvía automáticamente con "by sqsClient" }
SqsExtendedClient y SnsExtendedClient son clientes completos de aws-sdk-kotlin y funcionan en cualquier lugar donde se espere un cliente normal.
IA e ingeniero – con roles claros
- escribió código según mis especificaciones
- generó tests y boilerplate
- redactó un primer borrador de la documentación
- definí la arquitectura
- sustituí Jackson por kotlinx.serialization
- revisé las licencias de cada proyecto
- fijé los límites y los documenté abiertamente
- aseguré los tests, el build y la publicación
El núcleo de las tres librerías se escribió en una tarde. Los tests, la revisión de licencias y la publicación vinieron después – y ahí está el verdadero valor.
Licencias, límites, tests
- Licencias: s3overflow es una implementación nueva e independiente. sqsoverflow y snsoverflow se declaran como obras derivadas de las librerías de AWS, con la atribución en cada archivo que exige la licencia Apache 2.0.
- Límites: Los clientes de Kotlin no son compatibles a nivel de formato de mensaje con las librerías Java. La documentación lo indica abiertamente.
- Tests: Los tests de integración verifican el comportamiento contra un emulador local de AWS. Cada versión incluye una procedencia firmada.
Publicado y listo para usar
Las tres librerías son open source y están publicadas en Maven Central. Para añadirlas basta una línea de Gradle:
implementation("com.christoph-sens:sqsoverflow:1.1.0")Las librerías Java de AWS siguen manteniéndose y siguen siendo la opción correcta para servicios Java. Los nuevos clientes no las sustituyen, sino que cierran un hueco para Kotlin.
Detalles técnicos: Large SQS and SNS messages in Kotlin (en inglés).
Qué significa esto para usted
- Identificar el hueco real en lugar de gestionar síntomas.
- Diseñar una solución para la plataforma de destino en lugar de portar mecánicamente código ajeno.
- Usar la IA para ganar velocidad y responsabilizarse del resultado – con revisión de licencias, tests y una publicación trazable.
¿A su equipo le falta una pieza que hasta ahora solo existe para otra plataforma? Póngase en contacto conmigo.
