gpt4 book ai didi

java - 使用 Apache Camel 重复从只读文件系统轮询文件(幂等 = false)?

转载 作者:行者123 更新时间:2023-11-30 03:25:22 27 4
gpt4 key购买 nike

我正在使用轮询消费者模式来读取给定只读目录中的所有文件并处理它们。是否可以选择忽略幂等性?

我知道用 noop=true 和 idempotency=false 定义的路由会使整个系统崩溃(无限循环),但池消费者模式是在给定时刻触发的一次性操作。

最佳答案

camel file2 端点不会使系统崩溃,因为它默认每秒轮询 2 次。它会根据当时该文件夹中的所有文件创建一条消息。 (嗯,有一些选项可以忽略最近修改的文件,但其中大多数)。例如文件沿管道每秒发送 2 次。

幂等性默认处于关闭状态,除非传递“noop”以将文件保留在输入文件夹中。但是,每次端点轮询时,所有文件都会通过管道。我通常在处理后移动文件(或者如果我有多个使用者,则在使用 preMove 之前移动文件)以避免这些重复,并且仍然避免幂等性存储的复杂性。

选择 noop 时无法禁用幂等标志:

    FileConsumer result = newFileConsumer(processor, operations);

if (isDelete() && getMove() != null) {
throw new IllegalArgumentException("You cannot set both delete=true and move options");
}

// if noop=true then idempotent should also be configured
if (isNoop() && !isIdempotentSet()) {
log.info("Endpoint is configured with noop=true so forcing endpoint to be idempotent as well");
setIdempotent(true);
}

在这种情况下,创建消费者后,幂等标志会被重置。

可以做的是创建一个 IdempotRepository ( http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/spi/IdempotentRepository.html ) 的简单实现,它会忽略所有更新并告诉端点它以前从未见过此文件。

    package com.company;

import org.apache.camel.spi.IdempotentRepository;

public class DummyIdempotentRepository implements IdempotentRepository {
@Override
public boolean add(Object key) {
return true;
}

@Override
public boolean contains(Object key) {
return false;
}

@Override
public boolean remove(Object key) {
return true;
}

@Override
public boolean confirm(Object key) {
return true;
}

@Override
public void start() throws Exception {

}

@Override
public void stop() throws Exception {

}
}

类似这样的事情应该可以做到。

关于java - 使用 Apache Camel 重复从只读文件系统轮询文件(幂等 = false)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30352792/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com