Spring Integration один канал для нескольких производителей и потребителей - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть прямой канал:

@Bean
public DirectChannel emailingChannel() {
    return MessageChannels
            .direct( "emailingChannel")
            .get();
}

Могу ли я определить несколько потоков для одного и того же канала следующим образом:

@Bean
public IntegrationFlow flow1FromEmailingChannel() {
  return IntegrationFlows.from( "emailingChannel" )
            .handle( "myService" , "handler1")
            .get();
}

@Bean
public IntegrationFlow flow2FromEmailingChannel() {
  return IntegrationFlows.from( "emailingChannel" )
            .handle( "myService" , "handler2" )
            .get();
}

EDIT

@Service
public class MyService {

    public void handler1(Message<String> message){
      .... 
    }

    public void handler2(Message<List<String>> message){
      .... 
    }

}

Метод handle(...) каждого потока манипулирует различными типами данных payload, но цель одна и та же: чтение данных из канала и вызов соответствующего обработчика.Я бы хотел, чтобы многие if...else не проверяли тип данных в одном обработчике.

Дополнительный вопрос: Что происходит, когда несколько потоков вызывают один и тот же канал (независимо от его типа: * 1019)*, PubSub или Queue) одновременно (по умолчанию @Bean имеет одноэлементную область видимости)?

Большое спасибо

1 Ответ

0 голосов
/ 27 февраля 2019

По прямому каналу сообщения будут рассылаться потребителям в циклическом порядке.

При использовании канала очереди каждое сообщение будет получать только один потребитель;распределение будет основано на их соответствующих опросах.

С пабом / подканалом оба потребителя будут получать каждое сообщение.

Вам нужно предоставить больше информации, но похоже, что вам нужно добавитьМаршрутизатор типа полезной нагрузки в ваш поток для направления сообщений нужному потребителю.

EDIT

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

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