CPS-526 : Send Data-updated event asynchronously
CPS-526: Avoid response time potential impact of CPS Data Updated Event publication processClosed
Overview
CPS core sends the data updated event to Kafka synchronously which increases the Data node API response time. To avoid the impact, the cps-core notification feature will process the events asynchronously using spring async.
Solution
Spring async method is well documented and more details can be found at https://spring.io/guides/gs/async-method/
In the proposed implementation, we need to
Enable async processing
@EnableAsync public class AsyncConfig { ... }
Define the thread pool which will execute the async method. The thread pool setup properties are configurable.
AsyncConfig
@ConfigurationProperties("notification.async-executor") @Validated public class AsyncConfig { @Min(0) private int corePoolSize = 2; @Min(2) private int maxPoolSize = 10; @Min(0) private int queueCapacity = 2147483647; private boolean waitForTasksToCompleteOnShutdown = true; private String threadNamePrefix = "Async-"; @Bean("notificationExecutor") public TaskExecutor getThreadAsyncExecutorForNotification() { final ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(corePoolSize); executor.setMaxPoolSize(maxPoolSize); executor.setQueueCapacity(queueCapacity); executor.setWaitForTasksToCompleteOnShutdown(waitForTasksToCompleteOnShutdown); executor.setThreadNamePrefix(threadNamePrefix); return executor; } }
application.yml
notification: async-executor: core-pool-size: 2 max-pool-size: 10 queue-capacity: 500 wait-for-tasks-to-complete-on-shutdown: true thread-name-prefix: Async-
Mark the method async and mention the thread-pool name
NotificationService