Как объединить заголовки из разных каналов с разными типами полезной нагрузки в одно сообщение для дальнейшей обработки JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как объединить заголовки из разных каналов с разными типами полезной нагрузки в одно сообщение для дальнейшей обработки

Сообщение Anonymous »

Я новичок в Java и интеграции Spring/Spring, и у меня возникла проблема с каналами сообщений и агрегаторами. Я пытаюсь объединить заголовки двух разных каналов в один объект или список сообщений, но не уверен, что это лучший подход. В настоящее время мой выходной канал обрабатывает только одно сообщение за раз.
Вот моя текущая настройка:

Код: Выделить всё

public class IntCon {

@Bean
public MessageChannel inputChannel1() {
return new DirectChannel();
}

@Bean
public MessageChannel inputChannel2() {
return new DirectChannel();
}

@Bean
public MessageChannel outputChannel() {
return new DirectChannel();
}

@SuppressWarnings("unchecked")
@Bean
public IntegrationFlow vinylArchiveFlow() {
return IntegrationFlow
.from("inputChannel1")
.handle((payload, headers) -> {
List records = (List) payload;
VinylRecord lastVinyl = records.getLast();

return MessageBuilder.withPayload(lastVinyl)
.setHeader("lastVinyl", true)
.copyHeaders(headers)
.build();
})
.channel("outputChannel")
.get();
}

@SuppressWarnings("unchecked")
@Bean
public IntegrationFlow cdArchiveFlow() {
return IntegrationFlow
.from("inputChannel2")
.handle((payload, headers) -> {
List records = (List) payload;
CdRecord lastCD = records.getLast();

return MessageBuilder.withPayload(lastCD)
.setHeader("lastCD", true)
.copyHeaders(headers)
.build();
})
.channel("outputChannel")
.get();
}
}
Вот очень простая версия того, что я также реализовал, но в настоящее время она принимает только одно сообщение за раз и не обрабатывает оба, хотя они оба подтверждены на выходной канал.

Код: Выделить всё

@Aggregator(inputChannel = "outputChannel", outputChannel = "willDefineLater")
public Message aggregate(final List message : messages) {
// Store the message for later
messageStore.addMessage(message);

// Check the message for the headers
if (Boolean.TRUE.equals(message.getHeaders().get("lastVinyl"))) {
isLastVinyl = true; // Set isLastVinyl to true
}

if (Boolean.TRUE.equals(message.getHeaders().get("lastCD"))) {
isLastCD = true; // Set isLastCD to true
}
}

return ...;
}

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

Подробнее здесь: https://stackoverflow.com/questions/791 ... types-into
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»