опрос динамическиконфигурация динамической задержки весны Poller
Я использую Poller компонент от интеграции опрашивать файлы из s3.The фиксированной задержки 15 мин и максимальная скорость сообщения 1 .Отель причины я сделал это в вниз по течению сообщения в xd засорялись, так как я использую http.Now, это файл для файла записей 100k, но когда размер файла мал, я все еще жду 15 минут, хотя я могу быстро обрабатывать. Теперь есть какой-либо способ динамически установить задержку в зависимости от размера файла .Потому что мы не знаем, какие файлы будут опроса также знать это? В зависимости от размера файла я заберу или количество записей, мы можем динамически изменять фиксированную задержку или фиксированную ставку?
<int:poller fixed-delay="${fixedDelay}" default="true" max-messages-per-poll="${maxMessageRate}">
<int:advice-chain>
<ref bean="pollAdvise"/>
</int:advice-chain>
</int:poller>
<bean id="pollAdvise" class="org.springframework.integration.scheduling.PollSkipAdvice">
<constructor-arg ref="healthCheckStrategy"/>
</bean>
<bean id="healthCheckStrategy" class="test.ServiceHealthCheckPollSkipStrategy">
<property name="url" value="${url}"/>
<property name="doHealthCheck" value="${doHealthCheck}"/>
</bean>
<bean id="credentials" class="org.springframework.integration.aws.core.BasicAWSCredentials">
<property name="accessKey" value="${accessKey}"/>
<property name="secretKey" value="${secretKey}"/>
</bean>
<bean id="clientConfiguration" class="com.amazonaws.ClientConfiguration">
<property name="proxyHost" value="${proxyHost}"/>
<property name="proxyPort" value="${proxyPort}"/>
<property name="preemptiveBasicProxyAuth" value="false"/>
</bean>
<bean id="s3Operations" class="org.springframework.integration.aws.s3.core.CustomC1AmazonS3Operations">
<constructor-arg index="0" ref="credentials"/>
<constructor-arg index="1" ref="clientConfiguration"/>
<property name="awsEndpoint" value="s3.amazonaws.com"/>
<property name="temporaryDirectory" value="${temporaryDirectory}"/>
<property name="awsSecurityKey" value="${awsSecurityKey}"/>
</bean>
<!-- aws-endpoint="https://s3.amazonaws.com" -->
<int-aws:s3-inbound-channel-adapter aws-endpoint="s3.amazonaws.com"
bucket="${bucket}"
s3-operations="s3Operations"
credentials-ref="credentials"
file-name-wildcard="${fileNameWildcard}"
remote-directory="${remoteDirectory}"
channel="splitChannel"
local-directory="${localDirectory}"
accept-sub-folders="false"
delete-source-files="true"
archive-bucket="${archiveBucket}"
archive-directory="${archiveDirectory}">
</int-aws:s3-inbound-channel-adapter>
<int-file:splitter id="s3splitter" input-channel="splitChannel" output-channel="bridge" markers="false" charset="UTF-8">
<int-file:request-handler-advice-chain>
<bean class="org.springframework.integration.handler.advice.ExpressionEvaluatingRequestHandlerAdvice">
<property name="onSuccessExpression" value="payload.delete()"/>
</bean>
</int-file:request-handler-advice-chain>
</int-file:splitter>
Предположим, что есть 3 файла a.file 100 mb b.file 1 mb и c.file 10 mb. Я думаю, что poller потянет его случайным образом? Я хочу, чтобы a.file имел фиксированную задержку в 10 минут файла b 1 мин и файл c 5 мин – constantlearner
Mmm. Это не имеет значения. Вы хотите изменить следующее время опроса в текущем сообщении. Это все, что вы можете сделать в 'AbstractMessageSourceAdvice.afterReceive()' impl и использовать 'DynamicPeriodicTrigger' для изменения своего' period' на основе размера файла. –
Спасибо, попробуем это – constantlearner