【问题标题】:Not able to get no of file Service activator will process - file inbound channel adapter无法获取文件服务激活器将处理 - 文件入站通道适配器
【发布时间】:2016-06-23 08:21:32
【问题描述】:

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

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

我的问题是我们如何确保在 Service activator 类中我们将收到多少个文件。这样我们就可以根据从 Filter 类接收到的文件数量来执行我们的业务?

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

【问题讨论】:

    标签: spring spring-integration inbound


    【解决方案1】:

    <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

    【讨论】:

    • 感谢您的帮助...阿尔乔姆
    • 很高兴听到!是不是表示你已经可以接受答案了?
    • 其实......我们做了一些其他的方式......我们在通道适配器和 Activator 类之间有一个过滤器......所以我们只引入一个 POJO 类,它具有类似的属性,没有文件过滤器找到了。然后我们从激活器类中读取这个属性。而已 !!。但是感谢您的建议,将来如果需要,我也会尝试实施。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2014-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多