¿Cómo puedo añadir un custom extensión?

En extensiones, se discutieron los diferentes tipos de extensiones disponibles. Esta guía explica cómo proporcionar su propia custom extensión.

La clase importante de la que debe estar al tanto aquí es 'ExtensionsProvider', que le permite especificar cualquiera de los puntos de extensión que necesita utilizar en sus flujos. No es necesario proporcionar todas las extensiones aquí, ya que cualquier extensión que no se proporcione simplemente recurrirá a las implementaciones predeterminadas.

Todas las extensiones se registran a través de la clase de dominio del modelo. Después de que su modelo de dominio esté construido, verá:

new XXXDomain. Builder(actorSystem)
    .withXXXExtensions(ExtensionProvider.<XXXAggregate>builder().build())
    .withFallbackExtensions(ExtensionProvider.<Aggregate>builder().build())
    .build();

En esta definición de Builder, podemos ver que hay dos métodos clave disponibles:

  • 'conXXXExtensiones'- esto nos permite definir un proveedor de extensiones que es específico para un flujo dado (definido a través de la definición del agregado).

  • 'conExtensionesDeRespaldo'- esto nos permite definir un proveedor de extensiones predeterminado que se aplicará a todos los flujos. Nota: cualquier extensión proporcionada a nivel de flujo tendrá prioridad sobre estas extensiones de respaldo.

Por ejemplo, aquí podemos ver un dominio estándar que se está construyendo y que ha sido provisto con una extensión específica de manejo de errores:

new ErrorHandlingDomain. Builder(actorSystem)
                .withErrorHandlingMappingAdapter(errorHandlingMappingPort)
                .withErrorHandlingExternalDomainActionAdapter(errorHandlingExternalDomainActionPort)
                .withErrorHandlingExtensions(ExtensionProvider.<ErrorHandlingAggregate>builder().flowErrorExtensions(flowErrorExtensions).build())
                .withEventBus(systemEventBus)
                .withDispatcher(new SimpleFloDispatcher())
                .build();