Spring DS Java интеграции: Как совместно использовать переменную заголовка в одном потоке интеграции - PullRequest
0 голосов
/ 10 января 2019

псевдокод моего потока

    @Bean
    private IntegrationFlow myChannel() {
    return f -> f
            .enrichHeaders(h -> h.header("x", "y", true))
            .split(...)
            ...
            ..handle("myHandler", "doMyWork")
            ...
            .enrichHeaders(h -> h.header("x", "z", true))
}

Сначала в заголовке "x" устанавливается значение "y". Затем сообщения разделяются, и для первого сообщения в заголовке устанавливается значение «z». Когда второе сообщение приходит в метод doMyWork обработчика myHandler, заголовок "x" имеет значение "y". Я хочу, чтобы это значение было "z".

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

1 Ответ

0 голосов
/ 10 января 2019

Вы неправильно понимаете понятия; Метод EIP работает только с текущим сообщением; все разделенные сообщения будут наследовать значение из родительского (предварительно разделенного) сообщения, каждое сообщение затем получит z позже в потоке.

Каждое сообщение получает свой собственный набор заголовков, которые являются неизменяемыми.

Вы можете сделать заголовок изменяемым значением (например, AtomicReference<String>) - но я бы не советовал, это очень затруднило бы отладку.

Возможно, вы могли бы сохранить какое-то состояние в бине вместо того, чтобы пытаться использовать заголовки сообщений таким образом.

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