Oi Teo, tudo bem?
Para executar uma callback quando o circuit breaker voltar para o estado fechado, você pode utilizar a biblioteca Hystrix do Spring Cloud. O Hystrix possui um recurso chamado EventListener, que permite que você defina uma função para ser executada quando o circuit breaker é fechado novamente.
Você pode criar uma classe que implementa a interface HystrixCommandExecutionHook e sobrescrever o método onExecutionSuccess. Nesse método, você pode verificar se o circuit breaker voltou para o estado fechado e, caso positivo, executar a função desejada.
Aqui está um exemplo de como você pode fazer isso:
import com.netflix.hystrix.HystrixCommandExecutionHook;
import com.netflix.hystrix.HystrixCommandKey;
import com.netflix.hystrix.strategy.HystrixPlugins;
public class MyHystrixCommandExecutionHook extends HystrixCommandExecutionHook {
@Override
public <T> void onExecutionSuccess(HystrixCommandKey commandKey, T response) {
if (commandKey.name().equals("NomeDoSeuCircuito")) {
// Verifica se o circuit breaker voltou para o estado fechado
if (HystrixPlugins.getInstance().getCommandExecutionHook().isCommandExecutionInterrupted()) {
// Executa a função desejada
enviarConfirmacoes();
}
}
}
private void enviarConfirmacoes() {
// Lógica para enviar as confirmações para o microsserviço de pedidos
}
}
Depois de criar essa classe, você precisa registrar o seu HystrixCommandExecutionHook personalizado. Isso pode ser feito no método main da sua aplicação, por exemplo:
import com.netflix.hystrix.strategy.HystrixPlugins;
public class Main {
public static void main(String[] args) {
// Registra o HystrixCommandExecutionHook personalizado
HystrixPlugins.getInstance().registerCommandExecutionHook(new MyHystrixCommandExecutionHook());
// Restante do código da sua aplicação
}
}
Dessa forma, toda vez que o circuit breaker voltar para o estado fechado, a função enviarConfirmacoes será executada automaticamente. Lembrando que isso é uma ideia do que você pode fazer.
Um abraço e bons estudos.