小编Jac*_*son的帖子

收到消息后如何停止轮询?弹簧集成

我想轮询目录中的文件并在找到文件后停止轮询。我对 Spring 框架非常陌生,其中很多内容仍然非常令人困惑。经过一些研究后,我发现了几种方法可以做到这一点,但没有任何运气。

其中一种方法是使用控制总线,如下所示。然而,轮询似乎在 2 秒后就停止了。我不确定如何包含仅在收到文件时停止的条件。

另一种方法是使用此处回答的“智能轮询” 。答案中的链接很旧,但它指向此处的官方 Spring 文档:Smart Polling。通过这篇文章,我了解了AbstractMessageSourceAdviceSimpleActiveIdleMessageSourceAdvice。后者似乎适合我的目标,并且是最容易实现的,所以我决定尝试一下。我的代码如下:

集成配置.java

package com.example.springexample;

import java.io.File;

import org.aopalliance.aop.Advice;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.annotation.InboundChannelAdapter;
import org.springframework.integration.annotation.Poller;
import org.springframework.integration.aop.SimpleActiveIdleMessageSourceAdvice;
import org.springframework.integration.channel.DirectChannel;
import org.springframework.integration.config.EnableIntegration;
import org.springframework.integration.core.MessageSource;
import org.springframework.integration.dsl.IntegrationFlow;
import org.springframework.integration.dsl.IntegrationFlows;
import org.springframework.integration.file.FileReadingMessageSource;
import org.springframework.integration.file.filters.SimplePatternFileListFilter;
import org.springframework.integration.util.DynamicPeriodicTrigger;
import org.springframework.messaging.MessageChannel;

@Configuration
@EnableIntegration
public class IntegrationConfig {

    @Bean
    public IntegrationFlow advised() {
        return IntegrationFlows.from("fileInputChannel")
                .handle("runBatchScript", "run", c -> c.advice(stopPollingAdvice()))
                .get();
    }

    @Bean
    public MessageChannel fileInputChannel() …
Run Code Online (Sandbox Code Playgroud)

spring spring-integration

2
推荐指数
1
解决办法
2007
查看次数

标签 统计

spring ×1

spring-integration ×1