1

Have a spring integration application where files are routed from a folder to S3 buckets using s3-outbound-channel-adapter. If the file processed successfully, then file will be moved to corresponding target-bucket. if any error , file move to error bucket via error channel.

Have to generate a daily statistics report in a text file containing below details.

Total no of files processed: Total success : Total Error:

Would like to know how to get no of files processed successfully/error. Is there any way to achieve this requirement.

Any suggestion or example would be helpful.

Gone through the DefaultMessageChannelMetrics and Micrometer Integration in documentation. Not sure it will help my requirement.

Have separate gateway and adapter to process success and error files.

Success :

<int-aws:s3-outbound-gateway id="s3FileMover"
        request-channel="filesOutS3GateWay"
        reply-channel="filesOutS3ChainChannel"
        transfer-manager="transferManager"
        bucket-expression = "headers.TARGET_PATH"
        key-expression="headers.file_name"
        command="UPLOAD">
        <int-aws:request-handler-advice-chain>
            <ref bean="retryAdvice" />
        </int-aws:request-handler-advice-chain>
    </int-aws:s3-outbound-gateway>

Error :

<int-aws:s3-outbound-channel-adapter id="filesErrorS3Mover"
            channel="filesErrorS3MoverChannel"
            transfer-manager="transferManager"
            bucket="${aws.s3.error.bucket}"
             key-expression="headers.TARGET + '/' + headers.file_name"
            upload-metadata-provider = "fileMetaDataProvider"
            command="UPLOAD">
            <int-aws:request-handler-advice-chain>
                <bean class="org.springframework.integration.handler.advice.ExpressionEvaluatingRequestHandlerAdvice">
                    <property name="onSuccessExpressionString" value="payload.delete()"/>
                </bean>
            </int-aws:request-handler-advice-chain>
4

1 回答 1

1

MessageChannelMetrics您可以直接在消息通道上直接查询和重置。

getSendCount();
reset();

所有标准消息通道都实现了该接口,因此只需注入通道...

@Autowired
private MessageChannelMetrics filesOutS3GateWay;

private int getCount() {
    return this.filesOutS3GateWay.getSendCount();
}
于 2018-11-16T15:22:39.403 回答