我已经实现了一个文件入站通道适配器来轮询目录。我们可以从其他一些入站流程接收多个文件......我们必须选择一些独特的文件进行合并。我们已经实现了一个自定义过滤器来执行这项工作(获取唯一文件并将其传递给服务激活器)。
在服务Activator上,我们将逐个接收文件。我们实际上没有任何线索知道我们收到多少文件来合并来自过滤器类的当前轮询,可能只有一个文件或多个文件。
我的问题是我们如何确保我们将在Service Activator类中接收多少个文件。那么我们可以根据从Filter类收到的文件数量来执行我们的业务吗?
有没有办法让服务激活器类知道...它将从过滤器类中收到多少个文件?
答案 0 :(得分: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