我们正在使用Spring cloude流 2.0 和Kafka作为消息代理。
我们已实现了一个断路器,用于在目标系统(数据库或第三方API)无法使用的情况下停止应用程序上下文,如此处建议的Stop Spring Cloud Stream @StreamListener from listening when target system is down
现在在Spring Cloud Stream 2.0中,有一种方法可以使用执行器Binding visualization and control
来管理活页夹的生命周期。
pause
绑定到绑定resume
,启动时绑定tidyverse
?
答案 0 :(得分:1)
对不起,我误解了你的问题。
您可以自动连接BindingsEndpoint
,但不幸的是,它的State
枚举是私有的,因此您无法以编程方式调用changeState()
。
编辑
您可以通过反射来完成它,但是有点难看...
@SpringBootApplication
@EnableBinding(Sink.class)
public class So53476384Application {
public static void main(String[] args) {
SpringApplication.run(So53476384Application.class, args);
}
@Autowired
BindingsEndpoint binding;
@Bean
public ApplicationRunner runner() {
return args -> {
Class<?> clazz = ClassUtils.forName("org.springframework.cloud.stream.endpoint.BindingsEndpoint$State",
So53476384Application.class.getClassLoader());
ReflectionUtils.doWithMethods(BindingsEndpoint.class, method -> {
try {
method.invoke(this.binding, "input", clazz.getEnumConstants()[2]); // PAUSE
}
catch (InvocationTargetException e) {
e.printStackTrace();
}
}, method -> method.getName().equals("changeState"));
};
}
@StreamListener(Sink.INPUT)
public void listen(String in) {
}
}