# Class BatchingSettings (2.81.0)

2.81.0 (latest) 2.80.0 2.79.0 2.76.0 2.75.0 2.74.1 2.73.1 2.72.2 2.71.0 2.70.3 2.69.0 2.68.2 2.67.0 2.66.0 2.65.0 2.63.1 2.62.0 2.61.0 2.60.0 2.59.1 2.58.0 2.57.0 2.55.0 2.54.1 2.53.0 2.52.0 2.51.0 2.50.0 2.49.0 2.48.1 2.47.0 2.46.1 2.45.0 2.43.0 2.42.0 2.41.0 2.39.0 2.38.0 2.37.0 2.36.0 2.35.0 2.34.1 2.33.0 2.32.1 2.31.1 2.30.1 2.24.0 2.23.3 2.22.0 2.21.0 2.20.1 2.19.6 2.18.7 2.17.0 2.16.0 2.15.0 2.14.0 2.13.0 2.12.2 2.11.0 2.10.0 2.9.0 2.8.1 2.7.1

    public abstract class BatchingSettings

Represents the batching settings to use for an API method that is capable of batching.

By default the settings are configured to **not** use batching (i.e. the batch size
threshold is 1). This is the safest default behavior, which has meaning in all possible
scenarios. Users are expected to configure actual batching thresholds explicitly: the element
count, the request bytes count and the delay.

Warning: With the wrong settings, it is possible to cause long periods of dead waiting time.

When batching is turned on for an API method, a call to that method will result in the request
being queued up with other requests. When any of the set thresholds are reached, the queued up
requests are packaged together in a batch and set to the service as a single RPC. When the
response comes back, it is split apart into individual responses according to the individual
input requests.

There are several supported thresholds:

- **Delay Threshold**: Counting from the time that the first message is queued, once this delay has passed, then send the batch. The default value is 1 millisecond.
- **Message Count Threshold**: Once this many messages are queued, send all of the messages in a single call, even if the delay threshold hasn't elapsed yet. The default value is 1 message.
- **Request Byte Threshold**: Once the number of bytes in the batched request reaches this threshold, send all of the messages in a single call, even if neither the delay or message count thresholds have been exceeded yet. The default value is 1 byte.

These thresholds are treated as triggers, not as limits. Thus, if a request is made with 2x
the message count threshold, it will not be split apart (unless one of the limits listed further
down is crossed); only one batch will be sent. Each threshold is an independent trigger and
doesn't have any knowledge of the other thresholds.

Two of the values above also have limits:

- **Message Count Limit**: The limit of the number of messages that the server will accept in a single request.
- **Request Byte Limit**: The limit of the byte size of a request that the server will accept.

For these values, individual requests that surpass the limit are rejected, and the batching
logic will not batch together requests if the resulting batch will surpass the limit. Thus, a
batch can be sent that is actually under the threshold if the next request would put the combined
request over the limit.

Batching also supports FlowControl. This can be used to prevent the batching implementation
from accumulating messages without limit, resulting eventually in an OutOfMemory exception. This
can occur if messages are created and added to batching faster than they can be processed. The
flow control behavior is controlled using FlowControlSettings.

## Inheritance

[java.lang.Object](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html) \> BatchingSettings

## Inherited Members

[Object.clone()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#clone--) [Object.equals(Object)](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang.Object-) [Object.finalize()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#finalize--) [Object.getClass()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#getClass--) [Object.hashCode()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#hashCode--) [Object.notify()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notify--) [Object.notifyAll()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notifyAll--) [Object.toString()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#toString--) [Object.wait()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait--) [Object.wait(long)](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-) [Object.wait(long,int)](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-int-)

## Static Methods

### newBuilder()

    public static BatchingSettings.Builder newBuilder()

Get a new builder.

| **Returns** ||
|---|---|
| **Type** | **Description** |
| `https://docs.cloud.google.com/java/docs/reference/gax/latest/com.google.api.gax.batching.BatchingSettings.Builder` |   |

## Constructors

### BatchingSettings()

    public BatchingSettings()

## Methods

### getDelayThreshold()

    public Duration getDelayThreshold()

> [!WARNING]
> **Obsolete**
>
> *Use getDelayThresholdDuration() instead*
>
> This feature is stable for usage in this major version, but may be deprecated in a future release.

This method is obsolete. Use [#getDelayThresholdDuration()](https://docs.cloud.google.com/java/docs/reference/gax/latest/com.google.api.gax.batching.BatchingSettings#com_google_api_gax_batching_BatchingSettings_getDelayThresholdDuration__) instead

| **Returns** ||
|---|---|
| **Type** | **Description** |
| `org.threeten.bp.Duration` |   |

### getDelayThresholdDuration()

    public abstract Duration getDelayThresholdDuration()

Get the delay threshold to use for batching.

| **Returns** ||
|---|---|
| **Type** | **Description** |
| `https://docs.oracle.com/javase/8/docs/api/java/time/Duration.html` |   |

### getElementCountThreshold()

    public abstract Long getElementCountThreshold()

Get the element count threshold to use for batching.

| **Returns** ||
|---|---|
| **Type** | **Description** |
| `https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html` |   |

### getFlowControlSettings()

    public abstract FlowControlSettings getFlowControlSettings()

Get the flow control settings to use.

| **Returns** ||
|---|---|
| **Type** | **Description** |
| `https://docs.cloud.google.com/java/docs/reference/gax/latest/com.google.api.gax.batching.FlowControlSettings` |   |

### getIsEnabled()

    public abstract Boolean getIsEnabled()

Returns the Boolean object to indicate if the batching is enabled. Default to true

| **Returns** ||
|---|---|
| **Type** | **Description** |
| `https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html` |   |

### getRequestByteThreshold()

    public abstract Long getRequestByteThreshold()

Get the request byte threshold to use for batching.

| **Returns** ||
|---|---|
| **Type** | **Description** |
| `https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html` |   |

### toBuilder()

    public abstract BatchingSettings.Builder toBuilder()

Get a builder with the same values as this object.

| **Returns** ||
|---|---|
| **Type** | **Description** |
| `https://docs.cloud.google.com/java/docs/reference/gax/latest/com.google.api.gax.batching.BatchingSettings.Builder` |   |