Spring集成ServiceActivator自动启动标志

时间:2019-05-23 01:07:47

标签: spring-integration spring-cloud-stream

我有一个带有ServiceActivator注释方法的Spring Boot应用程序,用于从队列中读取Message对象。像这样:

@EnableBinding(Sink.class)
public class MyProcessor {
    @ServiceActivator(inputChannel = Sink.INPUT)
    public void process(final Message<?> message) {
       // ...
    }
}

但是,现在我需要加载用户脚本并使用它来预处理消息的有效负载。此加载可能会失败,或者脚本可能无法编译。如果发生这种情况,我不想启动我的接收器,而只是将消息放在队列中,直到问题解决并重新启动应用程序为止。

ServiceActivator具有一个autostartup属性,因此我可以将其设置为false,然后在我满意脚本可以运行时手动启动接收器。但是,我不知道如何或何时进行手动开始。

1 个答案:

答案 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()处理它。