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 de los Conectores (ConnectorHealthIndicator) y en los procesadores de eventos internos (ConnectorEventProcessor).
Tradicionalmente, un conector 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 necesitar 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 La fábrica de beans puede visitar el endpoint actuator/health y su conector debe aparecer en la lista.