【问题标题】:What is the proper way of using bridge endpointConfigurer?使用网桥端点配置器的正确方法是什么?
【发布时间】:2020-05-25 16:33:29
【问题描述】:

我正在寻找一个关于如何通过根流连接不同集成流的组件。我看过 this 教程(参见 5.2. Bridge);它有一个主根流,然后是两个不同的流。我已经在我的应用程序中尝试过这个,但是如果没有放置 PollerMetadata.DEFAULT_POLLER,它就无法工作。给出一个错误:上下文中没有可用的默认轮询器。当我添加 PollerMetadata.DEFAULT_POLLER 时,桥端点配置器中的时间没有按预期工作。可能,默认情况下轮询器配置会发生冲突。

简而言之,如何通过一个主根连接两个不同的流?但是,不同的流程必须在不同的时间发挥作用。

我不知道我是否使用了正确的组件,我们将不胜感激。谢谢。

另外,我看到this 的问题有点类似。这可能有助于理解我的问题。

更新

    @Bean(name = PollerMetadata.DEFAULT_POLLER)
    public PollerMetadata poller() {
        return Pollers.fixedRate(60, TimeUnit.SECONDS, 10).get();
    }

    @Bean
    public IntegrationFlow fileReader() {
        return IntegrationFlows
                .from(sourceDirectory())
                .split()
                .publishSubscribeChannel(c -> c
                        .subscribe("fileWriter"))
                .publishSubscribeChannel(c -> c
                        .subscribe("anotherFileWriter"))
                .get();
    }

    @Bean
    public IntegrationFlow fileWriter() {
        return IntegrationFlows
                .from("fileWriter")
                .bridge(e -> e.poller(10, TimeUnit.SECONDS, 5))
                .handle()
                .get();
    }

    @Bean
    public IntegrationFlow anotherFileWriter() {
        return IntegrationFlows
                .from("anotherFileWriter")
                .bridge(e -> e.poller(20, TimeUnit.SECONDS, 5))
                .handle()
                .get();
    }

【问题讨论】:

    标签: spring-integration spring-integration-dsl


    【解决方案1】:

    当你问这样的问题时,你应该展示你的代码。

    不完全清楚你的意思是什么

    简而言之,如何通过一个主根连接两个不同的流?

    如果它们都从同一个可轮询通道消费,则每条消息将只进入一个或另一个流。

    为了具体回答您的问题,您指向的示例显示了如何在端点上配置特定轮询器...

    >.bridge(e -> e.poller(Pollers.fixedRate(1, TimeUnit.SECONDS, 20)))
    

    如果省略端点上的轮询器,则只需要默认轮询器。

    【讨论】:

    • 正如你所提到的,当我添加默认轮询器时它工作正常,但是我在桥中提到的时间不能正常工作。我检查了日志消息,应用程序依赖于默认轮询器。那是我的问题。我想,我试图对不相关的问题使用错误的组件。基本上,我想知道“桥轮询器与默认轮询器的行为如何?”即如果默认轮询器的周期是 5 分钟,桥接器中的轮询器是 1 分钟,我应该期待什么?另外,我已经通过实施更新了问题。
    • 1.您的 2 个订阅应该在同一个 publishSubscribeChannel 上; 2. 当你明确提供这样的轮询器时,根本不使用默认轮询器。 3.你的频道是直接频道,所以他们会在主轮询线程上立即被调用;您需要将它们更改为队列通道以在那里使用轮询器。
    猜你喜欢
    • 1970-01-01
    • 2012-08-22
    • 2015-05-24
    • 2021-12-15
    • 2020-09-13
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    • 2010-10-21
    相关资源
    最近更新 更多