diff --git a/ordinis-notifications/src/main/java/cloud/nstart/terravault/ordinis/notifications/dispatcher/NotificationsDispatcher.java b/ordinis-notifications/src/main/java/cloud/nstart/terravault/ordinis/notifications/dispatcher/NotificationsDispatcher.java index cf9e328..c1407ae 100644 --- a/ordinis-notifications/src/main/java/cloud/nstart/terravault/ordinis/notifications/dispatcher/NotificationsDispatcher.java +++ b/ordinis-notifications/src/main/java/cloud/nstart/terravault/ordinis/notifications/dispatcher/NotificationsDispatcher.java @@ -122,9 +122,24 @@ public class NotificationsDispatcher { @PostConstruct void init() { - log.info("NotificationsDispatcher initialized. Channels: {}, reviewerPoolEmail configured: {}", - channels.stream().map(c -> c.kind().wireName()).toList(), - !reviewerPoolEmail.isBlank()); + var channelNames = channels.stream().map(c -> c.kind().wireName()).toList(); + if (channels.isEmpty()) { + // Empty channels = ни один NotificationChannel bean не подключён + // (typically EmailChannel требует spring.mail.host через + // @ConditionalOnBean(JavaMailSender.class)). Dispatcher продолжает + // poll'ить outbox events но silently discards — ничего не отправляется. + // WARN чтобы это visible в monitoring/grep, не терялось среди INFO. + log.warn("NotificationsDispatcher initialized с ZERO channels — events" + + " будут собираться из outbox но НИЧЕГО не будет dispatch'нуто." + + " Чтобы actual delivery работала: set spring.mail.host (для" + + " EmailChannel) или register другой NotificationChannel bean." + + " ReviewerPoolEmail configured: {}", + !reviewerPoolEmail.isBlank()); + } else { + log.info("NotificationsDispatcher initialized. Channels: {}, reviewerPoolEmail configured: {}", + channelNames, + !reviewerPoolEmail.isBlank()); + } } /**