У меня есть простое рабочее приложение Spring Integration, которое перемещает сообщения из входящего шлюза RabbitMQ через цепочку обработчиков и в базу данных MongoDB. Когда я переключился с прямого канала на канал исполнителя, я начал получать ошибки подписчика. Наблюдая за событиями в отладчике, я увидел, что после создания компонента ExecutorChannel метод onInit() запускается и сбрасывает все значения по умолчанию. Я не могу понять, почему код будет структурирован для этого? Я посмотрел на DirectChannel.onInit(), и он только модифицирует вещи, если значения ранее не были установлены. Есть идеи? Я использую Spring Integration 4.1.2.Почему ExecutorChannel.onInit() перезагружает диспетчер?
// from
@Bean
DirectChannel uploadChannel(MessageHandlerChain uploadMessageHandlerChain) {
def bean = new DirectChannel()
bean.subscribe(uploadMessageHandlerChain)
bean
}
// to
@Bean
ExecutorChannel uploadChannel(MessageHandlerChain uploadMessageHandlerChain) {
def bean = new ExecutorChannel(Executors.newCachedThreadPool())
bean.subscribe(uploadMessageHandlerChain)
bean
}
org.springframework.integration.MessageDispatchingException: Dispatcher has no subscribers
Николаса, что упорядочение именно то, что мне было нужно. Спасибо. – user1836542
Если мой ответ решает ваш вопрос, пожалуйста, примите мой ответ и поддержите его –
Ребята, мне интересно, почему '@ ServiceActivator' на том, что' MessageHandlerChain' '@ Bean' вам не подходит? Даже если этот материал 'subscribe' работает хорошо, у вас нет конечной точки, и вы не сможете« остановить »прослушивание с канала во время выполнения. '' создает точно конечную точку и 'MessageHandler'. То же самое делается в упоминании аннотации выше. –