Documentation for a newer release is available. View Latest

Registro de Connectors Dinámicos

¿Cómo registro un Connector generado dinámicamente como un Bean?

Es importante que todos los Connectors estén registrados como Beans en el contexto de Spring. IPF aprovecha este hecho en los indicadores de salud de los Connectors (ConnectorHealthIndicator) y en los procesadores de eventos internos (ConnectorEventProcessor).

Tradicionalmente, un connector se crearía como un Bean estándar de la siguiente manera:

    @Bean
    public ReceiveConnector<CustomerCreditTransferInitiation> executePaymentReceiveConnector(
            ReceiveConnectorTransport initPaymentReceiveConnectorTransport,
            RequestHandler someRequestHandler,
            ActorSystem actorSystem) {
        return ReceiveConnector.<CustomerCreditTransferInitiation>builder("InitPaymentReceive", "initpayment.receive-connector", actorSystem)
                .withMessageLogger(m -> log.debug("Receive connector has identified message: {}", m.getMessage()))
                .withProcessingContextExtractor(tm -> ProcessingContext.builder()
                        .unitOfWorkId(UnitOfWorkId.createRandom())
                        .build())
                .withConnectorTransport(initPaymentReceiveConnectorTransport)
                .withReceiveTransportMessageConverter(message -> this.convertResponse(message.getPayload().toString()))
                .withReceiveHandler((context, payload) -> someRequestHandler.process(payload))
                .build();
    }

A veces no es posible definir un Bean en tiempo de compilación, y puede que necesite crear el connector dinámicamente en tiempo de ejecución.

Para hacerlo, necesita registrar el objeto connector en el ApplicationContext durante el inicio de la aplicación, como sigue (aquí usamos @PostConstruct):

@Autowired
private final ConfigurableApplicationContext context;

@PostContruct
public void createDynamicConnector() {
   ReceiveConnector<InitiationRequest> connector = createDynamicReceiveConnector();
   context.getBeanFactory().registerSingleton(connector.getName(), connector);
}

Para verificar que el connector se ha añadido a la Bean factory del ApplicationContext puede visitar el endpoint actuator/health y su connector debería aparecer en la lista.