@Override public void shutdown() throws InterruptedException { supervisor.shutdown(); }
@Override public void onRetransmissionStarts(SubscriptionName subscription) throws Exception { supervisor.retransmit(subscription); }
@Override public ConsumerProcess createProcess(Subscription subscription, Signal startSignal, java.util.function.Consumer<SubscriptionName> onConsumerStopped) { return new ConsumerProcess(startSignal, consumerFactory.createConsumer(subscription), retransmitter, clock, unhealthyAfter, onConsumerStopped); } }
@Override public void onRetransmissionStarts(SubscriptionName subscription) throws Exception { logger.info("Triggering retransmission for subscription {}", subscription); if (workTracker.isAssignedTo(subscription, consumerId())) { supervisor.retransmit(subscription); } } }
@Override public void shutdown() throws InterruptedException { balancingJob.stop(); consumersRegistry.stopLeaderLatch(); supervisor.shutdown(); }
@Override public void onSubscriptionAssigned(SubscriptionName subscriptionName) { logger.info("Assigning consumer for {}", subscriptionName.getQualifiedName()); Subscription subscription = subscriptionsCache.getSubscription(subscriptionName); supervisor.assignConsumerForSubscription(subscription); }
@Override public void onAssignmentRemoved(SubscriptionName subscription) { logger.info("Removing assignment from consumer for {}", subscription); supervisor.deleteConsumerForSubscriptionName(subscription); }
@Override public void onTopicChanged(Topic topic) { for (Subscription subscription : subscriptionsCache.subscriptionsOfTopic(topic.getName())) { executorService.submit(() -> supervisor.updateTopic(subscription, topic)); } }
ConsumersSupervisor consumersSupervisor(ConsumerFactory consumerFactory) { HermesMetrics metrics = metricsSupplier.get(); return new NonblockingConsumersSupervisor(configFactory, new ConsumersExecutorService(configFactory, metrics), consumerFactory, mock(OffsetQueue.class), mock(Retransmitter.class), mock(UndeliveredMessageLogPersister.class), subscriptionRepository, metrics, mock(ConsumerMonitor.class), Clock.systemDefaultZone()); }
@Override public void onRetransmissionStarts(SubscriptionName subscription) throws Exception { logger.info("Triggering retransmission for subscription {}", subscription); if (workTracker.isAssignedTo(subscription, consumerId())) { supervisor.retransmit(subscription); } } }
@Override public void shutdown() throws InterruptedException { balancingJob.stop(); consumersRegistry.stopLeaderLatch(); supervisor.shutdown(); }
@Override public ConsumerProcess createProcess(Subscription subscription, Signal startSignal, java.util.function.Consumer<SubscriptionName> onConsumerStopped) { return new ConsumerProcess(startSignal, consumerFactory.createConsumer(subscription), retransmitter, clock, unhealthyAfter, onConsumerStopped); } }
@Override public void shutdown() throws InterruptedException { supervisor.shutdown(); }
@Override public void onSubscriptionAssigned(SubscriptionName subscriptionName) { logger.info("Assigning consumer for {}", subscriptionName.getQualifiedName()); Subscription subscription = subscriptionsCache.getSubscription(subscriptionName); supervisor.assignConsumerForSubscription(subscription); }
@Override public void onAssignmentRemoved(SubscriptionName subscription) { logger.info("Removing assignment from consumer for {}", subscription); supervisor.deleteConsumerForSubscriptionName(subscription); }
@Override public void onRetransmissionStarts(SubscriptionName subscription) throws Exception { supervisor.retransmit(subscription); }
@Override public void onTopicChanged(Topic topic) { for (Subscription subscription : subscriptionsCache.subscriptionsOfTopic(topic.getName())) { executorService.submit(() -> supervisor.updateTopic(subscription, topic)); } }
private void shutdown(ConsumersSupervisor supervisor) throws InterruptedException { supervisor.shutdown(); } }
@Override public void onAssignmentRemoved(SubscriptionName subscription) { logger.info("Scheduling assignment removal consumer for {}", subscription.getQualifiedName()); assignmentExecutor.execute(() -> { logger.info("Removing assignment from consumer for {}", subscription.getQualifiedName()); supervisor.deleteConsumerForSubscriptionName(subscription); logger.info("Consumer removed for {}", subscription.getName()); }); }
@Override public void onAssignmentRemoved(SubscriptionName subscription) { logger.info("Scheduling assignment removal consumer for {}", subscription.getQualifiedName()); assignmentExecutor.execute(() -> { logger.info("Removing assignment from consumer for {}", subscription.getQualifiedName()); supervisor.deleteConsumerForSubscriptionName(subscription); logger.info("Consumer removed for {}", subscription.getName()); }); }