Несколько IntegrationFlow подключены к одному каналу запроса в методе Gateway - PullRequest
0 голосов
/ 11 марта 2020

Учитывая, что у меня есть приложение, которое использует Spring Integration, и я определяю шлюз:

@Component
@MessagingGateway
public interface SmsGateway {

    @Gateway(requestChannel = CHANNEL_SEND_SMS)
    void sendSms(SendSmsRequest request);
}

public interface IntegrationChannels {
    String CHANNEL_SEND_SMS = "channelSendSms";
}

Я также присоединяю IntegrationFlow к CHANNEL_SEND_SMS каналу:

@Bean
public IntegrationFlow sendSmsFlow() {
    return IntegrationFlows.from(CHANNEL_SEND_SMS)
            .transform(...)
            .handle(...)
            .get();
}

Всякий раз, когда я звоню sendSms метод шлюза из бизнес-кода, sendSmsFlow выполняется как ожидалось.

Когда я хочу подключить другой IntegrationFlow к тому же каналу CHANNEL_SEND_SMS, например,

@Bean
public IntegrationFlow differentFlow() {
    return IntegrationFlows.from(CHANNEL_SEND_SMS)
            .transform(...)
            .handle(...)
            .get();
}

затем differentFlow не выполняется.

Почему он ведет себя таким образом?

Есть ли какое-либо решение, чтобы оно работало для обоих потоков?

1 Ответ

1 голос
/ 11 марта 2020

Тип канала по умолчанию - DirectChannel, а сообщения распределяются по нескольким подписанным каналам в циклическом порядке по умолчанию.

Объявите CHANNEL_SEND_SMS как PublishSubscribeChannel, если вы хотите, чтобы каждый поток получал каждый message.

Это будет работать только с void методом шлюза; если есть тип возврата, вы получите первый (или случайный, если есть какая-либо асинхронная c нисходящая обработка), а остальные будут отброшены.

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