1

我已经实现了一个文件入站通道适配器来轮询目录。我们可以从其他一些入站进程接收多个文件......在其中我们必须选择一些独特的文件进行合并。我们已经实现了一个自定义过滤器来执行这项工作(获取唯一文件并将其传递给服务激活器)。

在服务激活器上,我们将一一接收文件。而且我们实际上没有任何线索,我们从过滤器类的当前轮询中收到了多少要合并的文件,可能只有一个文件或多个文件。

我的问题是我们如何确保在服务激活器课程中我们将收到多少文件。这样我们就可以根据从 Filter 类收到的文件数量来执行我们的业务?

有什么方法可以让服务激活器类知道......它将从过滤器类的轮询中收到多少个文件?

4

1 回答 1

0

<poller>一个选项,如:

    <xsd:attribute name="max-messages-per-poll" type="xsd:string">
        <xsd:annotation>
            <xsd:documentation>
                The maximum number of messages that will be produced for each poll. Defaults to
                infinity (indicated by -1) for polling consumers, and 1 for polled
                inbound channel adapters.
            </xsd:documentation>
        </xsd:annotation>
    </xsd:attribute>

因此,如果有一些合理的价值,您将限制您的服务。如果您不将每条消息转移到单独的线程中,您可以简单地AtomicInteger在您的服务中使用一个来计算它们。在轮询任务结束时,您可以重置该计数器以准备在下一次轮询时再次计算。为此,您可以使用AbstractMessageSourceAdvice它的afterReceive() 实现,例如在 时重置计数器result == null

在参考手册中查看更多信息:http: //docs.spring.io/spring-integration/reference/html/messaging-channels-section.html#conditional-pollers

于 2016-06-23T15:42:59.387 回答