Registro de Conectores Dinámicos

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

Es importante que todos los Conectores estén registrados como Beans en el contexto de Spring. IPF aprovecha este hecho en los indicadores de salud del conector (ConnectorHealthIndicator) y en el interno event procesadores (ConnectorEventProcessor).

Tradicionalmente, se crearía un conector como un estándar. Bean como sigue:

    @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 dinámicamente el conector en tiempo de ejecución.

Para hacer esto, necesita registrar el objeto conector en el ApplicationContext al inicio como sigue (aquí utilizamos @PostConstruct):

@Autowired
private final ConfigurableApplicationContext context;

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

Para verificar que el conector ha sido añadido al ApplicationContext Bean factory Puede visitar el endpoint actuator/health y su conector debería aparecer en la lista.