← Inicio
Success Story · Kotlin · AWS · Open Source

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.

Problema

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.

Solución

Tres nuevas librerías diseñadas para Kotlin: s3overflow, sqsoverflow y snsoverflow.

Resultado

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
Contexto

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.

Diseño

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.
SqsExtendedClient.kt
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.

Reparto del trabajo

IA e ingeniero – con roles claros

La IA …
  • escribió código según mis especificaciones
  • generó tests y boilerplate
  • redactó un primer borrador de la documentación
Yo …
  • 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.

Calidad

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.
Resultado

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:

build.gradle.kts
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).

Para su proyecto

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.

Contacto

Hablemos de su backend.

Escríbame brevemente de qué se trata. Le responderé personalmente y veremos juntos si puedo ayudarle y cómo.

Retrato de Christoph Sens
Christoph SensSu contacto directo