Class ChunkMessageChannelItemWriter<T>

java.lang.Object
org.springframework.batch.integration.chunk.ChunkMessageChannelItemWriter<T>
All Implemented Interfaces:
StepExecutionListener, StepListener, StepContributionSource, org.springframework.batch.item.ItemStream, org.springframework.batch.item.ItemWriter<T>

public class ChunkMessageChannelItemWriter<T> extends Object implements StepExecutionListener, org.springframework.batch.item.ItemWriter<T>, org.springframework.batch.item.ItemStream, StepContributionSource
  • Field Details

    • DEFAULT_THROTTLE_LIMIT

      protected static final long DEFAULT_THROTTLE_LIMIT
      See Also:
    • messagingGateway

      protected org.springframework.integration.core.MessagingTemplate messagingGateway
    • localState

      protected final ChunkMessageChannelItemWriter.LocalState localState
    • throttleLimit

      protected long throttleLimit
    • DEFAULT_MAX_WAIT_TIMEOUTS

      protected final int DEFAULT_MAX_WAIT_TIMEOUTS
      See Also:
    • maxWaitTimeouts

      protected int maxWaitTimeouts
    • replyChannel

      protected org.springframework.messaging.PollableChannel replyChannel
  • Constructor Details

    • ChunkMessageChannelItemWriter

      public ChunkMessageChannelItemWriter()
  • Method Details

    • setMaxWaitTimeouts

      public void setMaxWaitTimeouts(int maxWaitTimeouts)
      The maximum number of times to wait at the end of a step for a non-null result from the remote workers. This is a multiplier on the receive timeout set separately on the gateway. The ideal value is a compromise between allowing slow workers time to finish, and responsiveness if there is a dead worker. Defaults to 40.
      Parameters:
      maxWaitTimeouts - the maximum number of wait timeouts
    • setThrottleLimit

      public void setThrottleLimit(long throttleLimit)
      Public setter for the throttle limit. This limits the number of pending requests for chunk processing to avoid overwhelming the receivers.
      Parameters:
      throttleLimit - the throttle limit to set
    • setMessagingOperations

      public void setMessagingOperations(org.springframework.integration.core.MessagingTemplate messagingGateway)
    • setReplyChannel

      public void setReplyChannel(org.springframework.messaging.PollableChannel replyChannel)
    • write

      public void write(org.springframework.batch.item.Chunk<? extends T> items) throws Exception
      Specified by:
      write in interface org.springframework.batch.item.ItemWriter<T>
      Throws:
      Exception
    • beforeStep

      public void beforeStep(StepExecution stepExecution)
      Specified by:
      beforeStep in interface StepExecutionListener
    • afterStep

      @Nullable public ExitStatus afterStep(StepExecution stepExecution)
      Specified by:
      afterStep in interface StepExecutionListener
    • close

      public void close() throws org.springframework.batch.item.ItemStreamException
      Specified by:
      close in interface org.springframework.batch.item.ItemStream
      Throws:
      org.springframework.batch.item.ItemStreamException
    • open

      public void open(org.springframework.batch.item.ExecutionContext executionContext) throws org.springframework.batch.item.ItemStreamException
      Specified by:
      open in interface org.springframework.batch.item.ItemStream
      Throws:
      org.springframework.batch.item.ItemStreamException
    • update

      public void update(org.springframework.batch.item.ExecutionContext executionContext) throws org.springframework.batch.item.ItemStreamException
      Specified by:
      update in interface org.springframework.batch.item.ItemStream
      Throws:
      org.springframework.batch.item.ItemStreamException
    • getStepContributions

      public Collection<StepContribution> getStepContributions()
      Description copied from interface: StepContributionSource
      Get the currently available contributions and drain the source. The next call would return an empty collection, unless new contributions have arrived.
      Specified by:
      getStepContributions in interface StepContributionSource
      Returns:
      a collection of StepContribution instances
    • waitForResults

      protected boolean waitForResults() throws AsynchronousFailureException
      Wait until all the results that are in the pipeline come back to the reply channel.
      Returns:
      true if successfully received a result, false if timed out
      Throws:
      AsynchronousFailureException
    • getNextResult

      protected void getNextResult() throws AsynchronousFailureException
      Get the next result if it is available (within the timeout specified in the gateway), otherwise do nothing.
      Throws:
      AsynchronousFailureException - If there is a response and it contains a failed chunk response.
      IllegalStateException - if the result contains the wrong job instance id (maybe we are sharing a channel and we shouldn't be)
    • wrapIfNecessary

      protected static AsynchronousFailureException wrapIfNecessary(Throwable throwable)
      Re-throws the original throwable if it is unchecked, wraps checked exceptions into AsynchronousFailureException.