У меня есть PublishSubscribeChannel следующим образом:
@Bean(name = {"publishCha.input", "publishCha2.input"}) //2 subscribers
public MessageChannel publishAction() {
PublishSubscribeChannel ps = MessageChannels.publishSubscribe().get();
ps.setMaxSubscribers(8);
return ps;
}
У меня также есть каналы подписчиков:
@Bean
public IntegrationFlow publishCha() {
return f -> f
.handle(m -> System.out.println("In publishCha channel..."));
}
@Bean
public IntegrationFlow publishCha2() {
return f -> f
.handle(m -> System.out.println("In publishCha2 channel..."));
}
И напоследок еще один подписчик:
@Bean
public IntegrationFlow anotherChannel() {
return IntegrationFlows.from("publishAction")
.handle(m -> System.out.println("ANOTHER CHANNEL IS HERE!"))
.get();
}
Проблема в том, что когда я вызываю канал с именем метода «publishAction», как показано ниже, из другого потока, он печатает только «ДРУГОЙ КАНАЛ ЗДЕСЬ» и игнорирует других подписчиков. Однако, если я позвоню с .channel("publishCha.input")
, на этот раз он войдет в подписчиков publishCha и publishCha2, но проигнорирует третьего подписчика.
@Bean
public IntegrationFlow flow() {
return f -> f
.channel("publishAction");
}
Мой вопрос: почему эти два разных метода ченнелинга дают разные результаты?
.channel("publishAction") // channeling with method name executes third subscriber
.channel("publishCha.input") // channelling with bean name, executes first and second subscribers
Редактировать: narayan-sambireddy спросил, как я могу отправлять сообщения на канал. Я отправляю его через шлюз:
@MessagingGateway
public interface ExampleGateway {
@Gateway(requestChannel = "flow.input")
void flow(Order orders);
}
В основном:
Order order = new Order();
order.addItem("PC", "TTEL", 2000, 1)
ConfigurableApplicationContext ctx = SpringApplication.run(Start.class, args);
ctx.getBean(ExampleGateway.class).flow(order);