Интеграция Spring org.springframework.integration.MessageTimeout Обработка исключений - PullRequest
0 голосов
/ 14 сентября 2018

У меня следующий поток интеграции пружины:

        @Bean
        public IntegrationFlow innerInFlow(@Value("${jms.concurrency:10}") String concurrency) {
            return IntegrationFlows
                    .from(Jms.messageDrivenChannelAdapter(
                            Jms.container(connectionFactory, innerQueue)
                                    .concurrency(concurrency)
                                    .taskExecutor(taskExecutor()).get())
                            .extractPayload(true))
                    .transform(Transformers.deserializer())
                    .route(eventRouter())
                    .get();
        }

И после маршрутизации

        @Bean
        public IntegrationFlow findPersonClienFlow(FindClientHandler findClientHandler) {
            return IntegrationFlows.from(findPersonClienChannel())
                    .transform(findClientHandler, "queryToFindClientRequest")
                    .handle(Jms.outboundGateway(connectionFactory).requestDestination(cifRequestQueue)
                            .replyDestination(cifResponseQueue).get())
                    .get();
        }

    }

В Jms.outboundGateway у меня есть org.springframework.integration.MessageTimeoutException, и я не могу понять, как я могу справиться с этимошибка?

Спасибо.

1 Ответ

0 голосов
/ 14 сентября 2018

Я считаю, что MessageTimeoutException есть, потому что другая сторона не отправляет вам ответ на cifResponseQueue.

Вы можете настроить receiveTimeout(), но по умолчанию это 5 secs.

Также вы можете настроить RequestHandlerRetryAdvice или ExpressionEvaluatingRequestHandlerAdvice для этого Jms.outboundGateway(), чтобы действительно обработать это исключение каким-то особым образом, используя advice(...) из ConsumerEndpointSpec.

См. Документы по этому вопросу: https://docs.spring.io/spring-integration/docs/current/reference/html/messaging-endpoints-chapter.html#message-handler-advice-chain

UPDATE

Также, как указал Гэри, вы можете поймать исключение из уровня Jms.messageDrivenChannelAdapter(), используя его errorChannel() и некоторый поток, подписанный на этот канал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...