文件尾部入站通道适配器stderr和stdout

时间:2016-12-10 11:40:31

标签: spring-integration

我正在尝试使用spring集成的尾文件,它正如下面的代码一样工作,但我有两个问题

@Configuration
public class RootConfiguration {

    @Bean(name = PollerMetadata.DEFAULT_POLLER)
    public PollerMetadata defaultPoller() {

        PollerMetadata pollerMetadata = new PollerMetadata();
        pollerMetadata.setTrigger(new PeriodicTrigger(10));
        return pollerMetadata;
    }

    @Bean
    public MessageChannel input() {
        return new QueueChannel(50);
    }

   @Bean
   public FileTailInboundChannelAdapterFactoryBean tailInboundChannelAdapterParser() {
       FileTailInboundChannelAdapterFactoryBean x = new FileTailInboundChannelAdapterFactoryBean();
       x.setAutoStartup(true);
       x.setOutputChannel(input());
       x.setTaskExecutor(taskExecutor());
       x.setNativeOptions("-F -n +0");
       x.setFile(new File("/home/shahbour/Desktop/file.txt"));
       return x;
   }

    @Bean
    @ServiceActivator(inputChannel = "input")
    public LoggingHandler loggingHandler() {
        return new LoggingHandler("info");
    }


    @Bean
    public TaskExecutor taskExecutor() {
        ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
        taskExecutor.setCorePoolSize(4);
        taskExecutor.afterPropertiesSet();
        return taskExecutor;

    }
}

每个日志下面我有4个线程用于拖尾文件。我需要所有这些还是我可以禁用一些。为什么我有监控进程java.lang.UNIXProcess@b37e761,阅读stderr,阅读stdout 的主题。

我问这个是因为我要在voip开关上运行程序,我想尽量使用最少的资源。

2016-12-10 13:22:55.666  INFO 14862 --- [ taskExecutor-1] t.OSDelegatingFileTailingMessageProducer : Starting tail process
2016-12-10 13:22:55.665  INFO 14862 --- [           main] t.OSDelegatingFileTailingMessageProducer : started tailInboundChannelAdapterParser
2016-12-10 13:22:55.682  INFO 14862 --- [           main] o.s.i.endpoint.PollingConsumer           : started rootConfiguration.loggingHandler.serviceActivator
2016-12-10 13:22:55.682  INFO 14862 --- [           main] o.s.c.support.DefaultLifecycleProcessor  : Starting beans in phase 2147483647
2016-12-10 13:22:55.701  INFO 14862 --- [           main] c.t.SonusbrokerApplication               : Started SonusbrokerApplication in 3.84 seconds (JVM running for 4.687)
2016-12-10 13:22:55.703 DEBUG 14862 --- [ taskExecutor-2] t.OSDelegatingFileTailingMessageProducer : Monitoring process java.lang.UNIXProcess@b37e761
2016-12-10 13:22:55.711 DEBUG 14862 --- [ taskExecutor-3] t.OSDelegatingFileTailingMessageProducer : Reading stderr
2016-12-10 13:22:55.711 DEBUG 14862 --- [ taskExecutor-4] t.OSDelegatingFileTailingMessageProducer : Reading stdout

我的第二个问题是,是否有可能从乞讨开始阅读文件并继续尾巴,我正在考虑使用本机选项-n 1000

  

注意:实际代码将在创建新文件时监控文件夹,然后启动尾部流程

1 个答案:

答案 0 :(得分:0)

进程监视器需要waitFor()进程 - 除了一点内存外,它不会使用任何资源。

stdout读者需要实际处理tail命令生成的数据。

起始线程(在你的情况下taskExecutor-1在完成启动其他线程的工作后退出)。

目前没有禁用stderr阅读器的选项,但我们很容易添加一个,因此在运行时只有2个线程。

随意打开JIRA 'improvement' Issue,当然还有contributions are welcome