Spring集成多轮询器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring集成多轮询器相关的知识,希望对你有一定的参考价值。

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

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

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

最佳方法是什么?

答案

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

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

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

以上是关于Spring集成多轮询器的主要内容,如果未能解决你的问题,请参考以下文章

Spring 批处理作业应仅在 Spring 集成文件轮询器轮询文件后执行一次

Spring集成轮询器与调度程序

Spring Integration 没有为端点定义轮询器

没有为通道适配器定义轮询器

Spring 集成 ConcurrentMetadataStore / RedisMetadataStore

是否可以使轮询器(或 PollableMessageSource)将消息作为列表轮询?