2016-08-29 2 views
1

У меня возникла проблема с обработкой пакетной обработки с интеграцией пружин. Обычно после сплиттера все элементы (Message) будут назначены с помощью корреляции_id для будущей группировки в агрегаторе, но проблема в том, что при возникновении исключения, возникающего при обработке элемента (Message), будет создано MeesageException и корреляция_id потерян.Исключительная интеграция интеграции интеграции с идентификатором корреляции

Я могу использовать HeaderEnricher для добавления корреляции, но это не может быть жестко закодировано. Я предполагаю, что другие мудрые, если есть несколько запросов, собираются вместе, вещи собираются вместе, и все будет испорчено. Корневая причина при метании пружинного исключения интеграция не присоединит correlation_id ... и кажется, никогда не будет повторно получило ...

агрегатор будет жаловаться «CorrelationStrategy терпит неудачу»

Как бороться с это? Допустим, мое ожидание может быть 10 Datapoint в пакетном режиме, и я хочу, чтобы дать ответ на {не удалось 5, пройти 5} или н

ответ

1

Когда org.springframework.messaging.MessagingException брошено компонентами Spring Integration, это, как правило, содержит failedMessage свойства для указания requestMessage, который вызвал проблему.

Все необходимые заголовки для вас (correlationId, sequenceNumber, sequenceSize и т. Д.) Находятся именно в этом имуществе.

Если вы собираетесь отправить результат обработки ошибок обратно в агрегатор, вы должны скопировать заголовки из этого failedMessage в новое сообщение.

Framework не делает этого по умолчанию, потому что ErrorMessage полностью отдельный поток, и нет гарантии, что он всегда возвращается к основному потоку, например. для агрегирования.

Дополнительную информацию см. В Error Handling chapter.

+0

Я думаю, что получил это! Я попробовал активатор int: service-activator для подключения канала ошибки, а метод обратного вызова принимает сообщение в качестве ввода, оно фактически находится в message.getpayload.getFailedMessage() – edi

+0

Действительно оцените вашу помощь! – edi

+0

failedMessage также включает в себя канал ответа, который кажется отличным от исходного канала при печати заголовка и сравнении с другим действительным рабочим потоком. Должен ли я исключать его, или я могу просто свалить все вещи из failMessage обратно в заголовки? – edi

Смежные вопросы