Skip to content

Bitácora

La idea de esta seccion es mencionar eventos o decisiones tomadas durante el proceso de reingenieria:

Subject Name Strategy

Como se menciona aqui existen 3 tipos de estrategias que usan los Serializer para registrar esquemas en la registry. Al momento de crear este repositorio, el cual registra los esquemas automaticamente, el tema de la estrategia no se tomo en cuenta por desconocimiento, y los esquemas se registran con el nombre del evento. La idea es utilizar la estrategia RecordNameStrategy y asi registrar cada esquema con su nombre completo incluido el namespace. Entonces el evento EnvioEntregado que se registraba con el mismo nombre, debera ser registrado como Integracion.Esquemas.Trazas.EnvioEntregado, todo estos datos pueden ser tomados del archivo .avsc que se genera en cada build. Actualmente las Github Actions asociadas a este repo toman el nombre del evento del archivo, lo cual debe ser modificado para tomar nombre y namespace para asi formar el nombre completo con el cual se debe registrar el esquema en la registry.

CustomSchemaAvroSerDes

Al seleccionar la estrategia RecordNameStrategy nos encontramos con un problema en la libreria Streamiz.Kafka.Net. La clase AvroSerDes<T> utilizada para la serializacion de eventos que se publican en los topicos no permite cambiar de estrategia, siendo la TopicNameStrategy la utilizada por dafault. Esto nos obliga por el momento a utiliza un CustomSchemaAvroSerDes<T> donde forzamos el uso de la estrategia que necesitamos usar. En paralelo se genero el PR #58 el cual corrige esto. Hasta que el PR no sea mergeado y una nueva version liberada, debemos utilizar el CustomSchemaAvroSerDes<T>. El mismo se utiliza actualmente en el nuevo Publicador de Integra basado en Stream.

Namespace obligatorio en todos los esquemas usando en la Regitry Apicurio

Trabajando con la Registry Apicurio, los esquemas y los serializer surgio otro problema. Al tener bien seteada la estrategia de busqueda de schemas en el serializar y tener bien registrado los esquemas, nos encontramos en que muchas veces al querer publicar algun evento en un topico, el serializar lanzaba una exception que dicia que no podia encontrar el esquema con un codigo, un 404 not found. Luego de verificar que el esquema estaba bien registrado y que la estrategia era la correcta, detectamos que no nos pasaba con todos los esquemas, por lo cual se realizaron pruebas para verificar que parte del esquema era el que no producia el error. Luego de las pruebas, se determino que la propiedad namespace faltaba en el evento Traza, pero este a nivel esquema no es obligatorio ya que pertenece al mismo namepace del evento. Al parecer, si bien esto es correcto a nivel avro, no es algo que le guste a la registry, por este motivo, al evento Traza se le agrega un atributo para que se le defina un namespace distinto. Esto hace que al generar el archivo .avsc que se envia a la registry, la definicion de Traza dentro de un evento, tenga un namespace diferente. Al parecer el serializer busca el esquema en la registry enviando todo el esquema actual que posee y no solo con el nombre. Esto hace que se interprenten diferente y por eso el error. Esto parece ser un problema de como la registry interpreta los esquemas y existen algunos issues dando vueltas con esto. Hasta que esto no se solucino a nivel registry, debemos tener muy encuenta esto al momento de trabajar con schemas y la registy.

  @namespace("Integracion.Esquemas")
  record Traza{
    string codigoDeEnvio;
    union { null, string } nombre=null;
    timestamp_ms cuando;
    string codigoDeContratoInterno;
    union { null, string } estadoDelEnvio=null;
    union { null, string } cicloDelEnvio=null;
    union { null, string } operador=null;
    union { null, string } estadoDeLaRendicion=null;
    union { null, string } comentario=null;
    union { null, Integracion.Esquemas.Referencias.DatosSucursal } sucursalAsociadaAlEvento=null;
  }