Spring集成多轮询器

问题描述 投票:1回答:1

我有一个集成,它具有两个不同的集成流程。因此,我将这些流程分为两个不同的类。假设第一个集成流程必须每两个小时工作一次,而另一个则每一个小时工作一次。

    // Class1
    @Bean
    public PollerMetadata poller1() {
        return Pollers.fixedRate(2, TimeUnit.HOURS, 1).get();
    }

    @Bean
    public IntegrationFlow start() {
        return IntegrationFlows
                .from("getOrders")
                .split()
                .channel(c -> c.queue(1))
                .publishSubscribeChannel(c -> c
                        .subscribe(s -> s.channel(SECOND_FLOW)))
                .get();
    }

    @Bean
    public IntegrationFlow flow2(){
       return IntegrationFlows.from(SECOND_FLOW).
       ...;
    }

    // Class2
    @Bean
    public PollerMetadata poller2() {
        return Pollers.fixedRate(1, TimeUnit.HOURS, 1).get();
    }

    @Bean
    public IntegrationFlow start() {
        return IntegrationFlows
                .from("getRequests")
                .split()
                .channel(c -> c.queue(1))
                .publishSubscribeChannel(c -> c
                        .subscribe(s -> s.channel(SECOND_FLOW)))
                .get();
    }

    @Bean
    public IntegrationFlow flow2(){
       return IntegrationFlows.from(SECOND_FLOW).
       ...;
    }

使用此实现,由于上下文中没有默认轮询器可用,应用程序运行失败。

最佳方法是什么?

spring-integration
1个回答
1
投票

您需要从透视图位置指向您的PollerMetadata豆之一。如果您谈论IntegrationFlow和某些端点轮询这些队列之一,则有一个相应的选项,例如:

.handle(..., e -> e.poller(PollerMetadata))

https://docs.spring.io/spring-integration/docs/current/reference/html/dsl.html#java-dsl-endpoints

© www.soinside.com 2019 - 2024. All rights reserved.