1

次のような 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」でチャネルを呼び出すと、「ANOTHER CHANNEL HERE」のみが出力され、他のサブスクライバーが無視されることです。ただし、 で呼び出すと .channel("publishCha.input")、今回は publishCha および publishCha2 サブスクライバーに入りますが、3 番目のサブスクライバーは無視されます。

@Bean
    public IntegrationFlow flow() { 
        return f -> f
       .channel("publishAction");
    }

私の質問は、これら 2 つの異なるチャネリング方法が異なる結果をもたらすのはなぜですか?

.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);
4

1 に答える 1