Class RemoteBucketBuilderView<K,KeyOld>

java.lang.Object
io.github.bucket4j.distributed.proxy.RemoteBucketBuilderView<K,KeyOld>
All Implemented Interfaces:
RemoteBucketBuilder<K>

public class RemoteBucketBuilderView<K,KeyOld> extends Object implements RemoteBucketBuilder<K>
  • Constructor Details

  • Method Details

    • withRecoveryStrategy

      public RemoteBucketBuilder<K> withRecoveryStrategy(RecoveryStrategy recoveryStrategy)
      Description copied from interface: RemoteBucketBuilder
      Configures custom recovery strategy instead of RecoveryStrategy.RECONSTRUCT that is used by default.
      Specified by:
      withRecoveryStrategy in interface RemoteBucketBuilder<K>
      Parameters:
      recoveryStrategy - specifies the reaction which should be applied in case of previously saved state of bucket has been lost, explicitly removed or expired.
      Returns:
      this
    • withOptimization

      public RemoteBucketBuilder<K> withOptimization(Optimization optimization)
      Description copied from interface: RemoteBucketBuilder
      Configures the optimization strategy that will be applied for buckets that are built by this builder.

      It is worth mentioning that optimization will take effect only if you reuse the bucket, so you need to store a reference to the bucket anywhere in order to reuse it later. In other words, if any request optimization strategy has been applied to the bucket proxy then proxy can not be treated as a cheap object.

      * The full list of built-in optimizations can be found there Optimizations

      Specified by:
      withOptimization in interface RemoteBucketBuilder<K>
      Parameters:
      optimization - optimization strategy
      Returns:
      this
    • withImplicitConfigurationReplacement

      public RemoteBucketBuilder<K> withImplicitConfigurationReplacement(long desiredConfigurationVersion, TokensInheritanceStrategy tokensInheritanceStrategy)
      Description copied from interface: RemoteBucketBuilder
      Activates implicit configuration replacement.

      By default distributed bucket operates with configuration that was provided at the time of its first creation. Providing the new configuration via RemoteBucketBuilder takes no effect if bucket is already persisted in the storage, because configuration is stored together with state of bucket. Without implicit configuration replacement, there is only one way to replace configuration of bucket - is explicit calling of Bucket.replaceConfiguration(BucketConfiguration, TokensInheritanceStrategy).

      When implicit configuration replacement is activated, bucket will automatically replace persisted configuration using provided tokensInheritanceStrategy in case of persisted version of configuration in the storage < than provided desiredConfigurationVersion.

      Specified by:
      withImplicitConfigurationReplacement in interface RemoteBucketBuilder<K>
      Parameters:
      desiredConfigurationVersion - specifies desired configuration version
      tokensInheritanceStrategy - the strategy that will be used for token migration if desiredConfigurationVersion of persisted bucket is less that provided desiredConfigurationVersion
      Returns:
      this
    • withListener

      public RemoteBucketBuilder<K> withListener(BucketListener listener)
      Description copied from interface: RemoteBucketBuilder
      Specifies listener for buckets that will be created by this builder.
      Specified by:
      withListener in interface RemoteBucketBuilder<K>
      Parameters:
      listener - the listener of bucket events.
      Returns:
      this builder instance
    • build

      public BucketProxy build(K key, Supplier<BucketConfiguration> configurationSupplier)
      Description copied from interface: RemoteBucketBuilder
      Has the same semantic with RemoteBucketBuilder.build(Object, BucketConfiguration), but additionally provides ability to provide configuration lazily, that can be helpful when figuring-out the right configuration parameters is costly, for example because parameters for particular key are stored in external database, configurationSupplier will be called if and only if bucket has not been persisted before.
      Specified by:
      build in interface RemoteBucketBuilder<K>
      Parameters:
      key - the key that used in external storage to distinguish one bucket from another.
      configurationSupplier - provider for bucket configuration
      Returns:
      new instance of BucketProxy created in lazy mode.
    • build

      public BucketProxy build(K key, BucketConfiguration configuration)
      Description copied from interface: RemoteBucketBuilder
      Builds the BucketProxy. Proxy is being created in lazy mode, its state is not persisted in external storage until first interaction, so if you want to save bucket state immediately then just call Bucket.getAvailableTokens().

      If you had not used RemoteBucketBuilder.withOptimization(Optimization) during construction then created proxy can be treated as cheap object, feel free just build, use and forget as many proxies under the same key as you need, do not cache the built instances.

      Specified by:
      build in interface RemoteBucketBuilder<K>
      Parameters:
      key - the key that used in external storage to distinguish one bucket from another.
      configuration - limits configuration
      Returns:
      new instance of BucketProxy created in lazy mode.
    • withMapper

      public <K2> RemoteBucketBuilder<K2> withMapper(Function<? super K2,? extends K> innerMapper)
      Description copied from interface: RemoteBucketBuilder
      Returns a proxy object that wraps this RemoteBucketBuilder such that keys are first mapped using the specified mapping function before being sent to the remote store. The returned RemoteBucketBuilder shares the same underlying store as the original, and keys that map to the same value will share the same remote state.
      Specified by:
      withMapper in interface RemoteBucketBuilder<K>
      Type Parameters:
      K2 - the type of key accepted by returned RemoteBucketBuilder
      Parameters:
      innerMapper - the mapper function to apply to keys
      Returns:
      a proxy object that wraps this RemoteBucketBuilder