我有一个带有ServiceActivator注释方法的Spring Boot应用程序,用于从队列中读取Message对象。像这样:
@EnableBinding(Sink.class)
public class MyProcessor {
@ServiceActivator(inputChannel = Sink.INPUT)
public void process(final Message<?> message) {
// ...
}
}
但是,现在我需要加载用户脚本并使用它来预处理消息的有效负载。此加载可能会失败,或者脚本可能无法编译。如果发生这种情况,我不想启动我的接收器,而只是将消息放在队列中,直到问题解决并重新启动应用程序为止。
ServiceActivator具有一个autostartup属性,因此我可以将其设置为false,然后在我满意脚本可以运行时手动启动接收器。但是,我不知道如何或何时进行手动开始。
答案 0 :(得分:0)
更多的是Spring Cloud Stream问题。这就是为什么我在您的问题中添加了相应标签的原因。
因此,在使脚本达到良好状态之前,您实际上绝对不能开始使用消息传递中间件。因此,@ServiceActivator
已经来不及了。队列中的消费操作已经开始。
我的意思是真的没有开始 binding 。您可以使用具有约束力的使用者属性来做到这一点:https://cloud.spring.io/spring-cloud-static/spring-cloud-stream/2.2.0.RELEASE/spring-cloud-stream.html#_consumer_properties
自动启动
此使用者是否需要自动启动的信号
默认值:
true
。
随后您可以通过Binding.start()
处理它。