Spring интеграция ServiceActivator флаг автозапуска - PullRequest
0 голосов
/ 23 мая 2019

У меня есть приложение Spring Boot с аннотированным методом ServiceActivator для чтения объектов сообщений из очереди. Что-то вроде:

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

Однако теперь у меня есть требование загрузить пользовательский скрипт и использовать его для предварительной обработки полезных данных сообщений. Эта загрузка может завершиться с ошибкой или сценарий может не скомпилироваться. Если это произойдет, я хочу не запускать мой приемник и просто оставлять сообщения в очереди, пока проблема не будет устранена и приложение не будет перезапущено.

ServiceActivator имеет атрибут autostartup, поэтому мне кажется, что я могу установить для него значение false, а затем запустить приемник вручную, когда я убедился, что сценарий в порядке. Тем не менее, я не могу понять, как и когда делать этот ручной запуск.

1 Ответ

0 голосов
/ 23 мая 2019

Это больше относится к Spring Cloud Stream.Вот почему я добавил соответствующий тег в ваш вопрос.

Итак, прежде чем вы достигнете хорошего состояния для своего скрипта, вы действительно не должны начинать использовать промежуточное программное обеспечение для обмена сообщениями.По этой причине @ServiceActivator уже слишком поздно.Потребление из очереди уже будет запущено.

Моя точка зрения на самом деле не в том, чтобы привязка была запущена.Это можно сделать с помощью связывающего свойства потребителя: https://cloud.spring.io/spring-cloud-static/spring-cloud-stream/2.2.0.RELEASE/spring-cloud-stream.html#_consumer_properties

autoStartup

Сигналы, если этот потребитель должен запускаться автоматически

По умолчанию: true.

Затем вы можете обработать его запуск позже с помощью Binding.start().

...