Class ChangesFollower

java.lang.Object
com.ibm.cloud.cloudant.features.ChangesFollower

public class ChangesFollower extends Object
A helper for using the changes feed.

There are two modes of operation:

  • startOneOff() to fetch the changes from the supplied since sequence until there are no further pending changes.
  • start() to fetch the changes from the supplied since sequence and then continuing to listen indefinitely for further new changes.

The starting sequence ID can be changed for either mode by using PostChangesOptions.Builder.since(String). By default when using:

In either mode the Stream of changes can be terminated early by calling stop().

By default ChangesFollower will suppress transient errors indefinitely and endeavour to run to completion or listen forever. For applications where that behaviour is not desirable an alternate constructor is available where a Duration may be specified to limit the time since the last successful response that transient errors will be suppressed.

It should be noted that errors considered terminal, for example, the database not existing or invalid credentials are never suppressed and will throw an exception immediately.

The PostChangesOptions model of changes feed options is used to configure the behaviour of the ChangesFollower. However, a subset of the options are invalid as they are configured internally by the implementation and will cause an IllegalArgumentException to be thrown if supplied. These invalid options are:

Only the value of _selector is permitted for the PostChangesOptions.Builder.filter(String) option. Selector based filters perform better than JS based filters and using one of the alternative JS based filter types will cause ChangesFollower to throw an IllegalArgumentException.

It should also be noted that the PostChangesOptions.Builder.limit(long) parameter will truncate the stream at the given number of changes in either operating mode.

The ChangesFollower requires the Cloudant client to have HTTP call and read timeouts of at least 1 minute. The default client configuration has sufficiently long timeouts.