diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/kafka/ErvuDirectoriesListener.java b/backend/src/main/java/ru/micord/ervu/account_applications/kafka/ErvuDirectoriesListener.java deleted file mode 100644 index ab690889..00000000 --- a/backend/src/main/java/ru/micord/ervu/account_applications/kafka/ErvuDirectoriesListener.java +++ /dev/null @@ -1,48 +0,0 @@ -package ru.micord.ervu.account_applications.kafka; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.kafka.annotation.KafkaListener; -import org.springframework.stereotype.Component; -import ru.micord.ervu.account_applications.service.ErvuDirectoriesService; - -/** - * @author Eduard Tihomirov - */ -@Component -public class ErvuDirectoriesListener { - - @Autowired - private ErvuDirectoriesService ervuDirectoriesService; - - @KafkaListener(id = "${kafka.domain.group.id}", topics = "${kafka.domain.reconciliation}", - autoStartup = "false") - public void listenKafkaDomain(String kafkaMessage) { - ervuDirectoriesService.upsertKafkaDomainMessage(kafkaMessage); - } - - @KafkaListener(id = "${kafka.role.group.id}", topics = "${kafka.role.reconciliation}", - autoStartup = "false") - public void listenKafkaRole(String kafkaMessage) { - ervuDirectoriesService.upsertKafkaRoleMessage(kafkaMessage); - } -// Пока не заведены, обещают в будущих апдейтах создать -// @KafkaListener(id = "${kafka.role.updated.group.id}", topics = "${kafka.role.updated}") -// public void listenKafkaRoleUpdated(String kafkaMessage) { -// ervuDirectoriesService.upsertKafkaRoleMessage(kafkaMessage); -// } - - // @KafkaListener(id = "${kafka.role.created.group.id}", topics = "${kafka.role.created}") -// public void listenKafkaRoleUpdated(String kafkaMessage) { -// ervuDirectoriesService.upsertKafkaRoleMessage(kafkaMessage); -// } - - @KafkaListener(id = "${kafka.domain.updated.group.id}", topics = "${kafka.domain.updated}") - public void listenKafkaDomainUpdated(String kafkaMessage) { - ervuDirectoriesService.upsertKafkaDomainMessage(kafkaMessage); - } - - @KafkaListener(id = "${kafka.domain.created.group.id}", topics = "${kafka.domain.created}") - public void listenKafkaDomainCreated(String kafkaMessage) { - ervuDirectoriesService.upsertKafkaDomainMessage(kafkaMessage); - } -} diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/kafka/KafkaConsumerInitializer.java b/backend/src/main/java/ru/micord/ervu/account_applications/kafka/KafkaConsumerInitializer.java deleted file mode 100644 index 453cbe1d..00000000 --- a/backend/src/main/java/ru/micord/ervu/account_applications/kafka/KafkaConsumerInitializer.java +++ /dev/null @@ -1,27 +0,0 @@ -package ru.micord.ervu.account_applications.kafka; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.DependsOn; -import org.springframework.kafka.config.KafkaListenerEndpointRegistry; -import org.springframework.kafka.listener.MessageListenerContainer; -import org.springframework.stereotype.Component; - -/** - * @author Eduard Tihomirov - */ -@Component -@DependsOn("ervuDirectoriesListener") -public class KafkaConsumerInitializer { - @Value("${kafka.domain.group.id}") - private String domainGroupId; - - @Value("${kafka.role.group.id}") - private String roleGroupId; - - public KafkaConsumerInitializer(KafkaListenerEndpointRegistry kafkaListenerEndpointRegistry) { - MessageListenerContainer listenerContainerDomain = kafkaListenerEndpointRegistry.getListenerContainer(domainGroupId); - MessageListenerContainer listenerContainerRole = kafkaListenerEndpointRegistry.getListenerContainer(roleGroupId); - listenerContainerDomain.start(); - listenerContainerRole.start(); - } -} diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java b/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java index 1ebd84ec..a9197259 100644 --- a/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java +++ b/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java @@ -9,6 +9,8 @@ import java.util.List; import java.util.Map; import java.util.UUID; +import javax.annotation.PostConstruct; + import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.slf4j.Logger; @@ -22,6 +24,9 @@ import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; +import org.springframework.kafka.annotation.KafkaListener; +import org.springframework.kafka.config.KafkaListenerEndpointRegistry; +import org.springframework.kafka.listener.MessageListenerContainer; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.client.RestTemplate; @@ -34,7 +39,7 @@ import ru.micord.ervu.account_applications.model.RoleResponse; * @author Eduard Tihomirov */ @Service -@DependsOn({"liquibase", "ervuDirectoriesListener"}) +@DependsOn("liquibase") public class ErvuDirectoriesService { private static final Logger LOGGER = LoggerFactory.getLogger( MethodHandles.lookup().lookupClass()); @@ -44,12 +49,67 @@ public class ErvuDirectoriesService { private String ervuDirectories; @Value("${ervu.admin.role:gomu_supervisor, system_administrator, security_administrator}") private String ervuAdminRole; + @Value("${load.directories:true}") + private Boolean loadDirectories; + @Value("${kafka.domain.group.id}") + private String domainGroupId; + @Value("${kafka.role.group.id}") + private String roleGroupId; @Autowired private RestTemplate restTemplate; @Autowired private ErvuDirectoriesDaoService ervuDirectoriesDaoService; @Autowired private ObjectMapper objectMapper; + @Autowired + private KafkaListenerEndpointRegistry kafkaListenerEndpointRegistry; + + @PostConstruct + public void init() { + MessageListenerContainer listenerContainerDomain = kafkaListenerEndpointRegistry.getListenerContainer(domainGroupId); + MessageListenerContainer listenerContainerRole = kafkaListenerEndpointRegistry.getListenerContainer(roleGroupId); + listenerContainerDomain.start(); + listenerContainerRole.start(); + if (loadDirectories) { + new Thread(this::updateDirectories).start(); + } + } + + @KafkaListener(id = "${kafka.domain.group.id}", topics = "${kafka.domain.reconciliation}", + autoStartup = "false") + @Transactional + public void listenKafkaDomain(String kafkaMessage) { + upsertKafkaDomainMessage(kafkaMessage); + } + + @KafkaListener(id = "${kafka.role.group.id}", topics = "${kafka.role.reconciliation}", + autoStartup = "false") + @Transactional + public void listenKafkaRole(String kafkaMessage) { + upsertKafkaRoleMessage(kafkaMessage); + } +// Пока не заведены, обещают в будущих апдейтах создать +// @KafkaListener(id = "${kafka.role.updated.group.id}", topics = "${kafka.role.updated}") +// public void listenKafkaRoleUpdated(String kafkaMessage) { +// ervuDirectoriesService.upsertKafkaRoleMessage(kafkaMessage); +// } + + // @KafkaListener(id = "${kafka.role.created.group.id}", topics = "${kafka.role.created}") +// public void listenKafkaRoleUpdated(String kafkaMessage) { +// ervuDirectoriesService.upsertKafkaRoleMessage(kafkaMessage); +// } + + @KafkaListener(id = "${kafka.domain.updated.group.id}", topics = "${kafka.domain.updated}") + @Transactional + public void listenKafkaDomainUpdated(String kafkaMessage) { + upsertKafkaDomainMessage(kafkaMessage); + } + + @KafkaListener(id = "${kafka.domain.created.group.id}", topics = "${kafka.domain.created}") + @Transactional + public void listenKafkaDomainCreated(String kafkaMessage) { + upsertKafkaDomainMessage(kafkaMessage); + } @Caching(evict = { @@ -81,7 +141,6 @@ public class ErvuDirectoriesService { } - @Transactional public void upsertKafkaDomainMessage(String kafkaMessage) { RecruitmentResponse[] recruitmentResponses; try { @@ -95,7 +154,6 @@ public class ErvuDirectoriesService { } } - @Transactional public void upsertKafkaRoleMessage(String kafkaMessage) { RoleResponse[] roleResponses; try {