Allows the implementer of ResponseObserver to control the flow of responses.
An instance of this class will be passed to ResponseObserver#onStart(StreamController), at which point the receiver can disable automatic
flow control. The receiver can also save a reference to the instance and terminate the stream
early using cancel().
Methods
cancel()
publicabstractvoidcancel()
Cancel the stream early.
This will manifest as an onError on the ResponseObserver with the cause being a
CancellationException.
disableAutoInboundFlowControl()
publicabstractvoiddisableAutoInboundFlowControl()
Disables automatic flow control.
The next response is requested immediately after the current response is processed by ResponseObserver#onResponse(Object). If disabled, an application must make explicit calls to
#request to receive messages.
request(int count)
publicabstractvoidrequest(intcount)
Requests up to the given number of responses from the call to be delivered to ResponseObserver#onResponse(Object). No additional messages will be delivered.
This method can only be called after disabling automatic flow control.
Message delivery is guaranteed to be sequential in the order received. In addition, the
listener methods will not be accessed concurrently. While it is not guaranteed that the same
thread will always be used, it is guaranteed that only a single thread will access the listener
at a time.
If called multiple times, the number of messages able to delivered will be the sum of the
calls.
This method is safe to call from multiple threads without external synchronizaton.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-09-03 UTC."],[[["\u003cp\u003eThis webpage provides documentation for the \u003ccode\u003eStreamController\u003c/code\u003e interface in the Google API Client Library for Java, offering a range of versions from 2.7.1 up to the latest, 2.63.1.\u003c/p\u003e\n"],["\u003cp\u003e\u003ccode\u003eStreamController\u003c/code\u003e allows a \u003ccode\u003eResponseObserver\u003c/code\u003e to manage the flow of responses, including the option to disable automatic flow control and request a specific number of messages manually.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003ecancel()\u003c/code\u003e method can be used to terminate a stream early, which will trigger an \u003ccode\u003eonError\u003c/code\u003e event on the \u003ccode\u003eResponseObserver\u003c/code\u003e.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003edisableAutoInboundFlowControl()\u003c/code\u003e method allows manual management of response delivery, requiring explicit calls to the \u003ccode\u003erequest(int count)\u003c/code\u003e method to receive further messages.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003erequest(int count)\u003c/code\u003e method allows requesting up to a specific number of responses, ensuring sequential delivery and non-concurrent access to listener methods.\u003c/p\u003e\n"]]],[],null,["# Interface StreamController (2.69.0)\n\nVersion latestkeyboard_arrow_down\n\n- [2.69.0 (latest)](/java/docs/reference/gax/latest/com.google.api.gax.rpc.StreamController)\n- [2.68.2](/java/docs/reference/gax/2.68.2/com.google.api.gax.rpc.StreamController)\n- [2.67.0](/java/docs/reference/gax/2.67.0/com.google.api.gax.rpc.StreamController)\n- [2.66.0](/java/docs/reference/gax/2.66.0/com.google.api.gax.rpc.StreamController)\n- [2.65.0](/java/docs/reference/gax/2.65.0/com.google.api.gax.rpc.StreamController)\n- [2.63.1](/java/docs/reference/gax/2.63.1/com.google.api.gax.rpc.StreamController)\n- [2.62.0](/java/docs/reference/gax/2.62.0/com.google.api.gax.rpc.StreamController)\n- [2.61.0](/java/docs/reference/gax/2.61.0/com.google.api.gax.rpc.StreamController)\n- [2.60.0](/java/docs/reference/gax/2.60.0/com.google.api.gax.rpc.StreamController)\n- [2.59.1](/java/docs/reference/gax/2.59.1/com.google.api.gax.rpc.StreamController)\n- [2.58.0](/java/docs/reference/gax/2.58.0/com.google.api.gax.rpc.StreamController)\n- [2.57.0](/java/docs/reference/gax/2.57.0/com.google.api.gax.rpc.StreamController)\n- [2.55.0](/java/docs/reference/gax/2.55.0/com.google.api.gax.rpc.StreamController)\n- [2.54.1](/java/docs/reference/gax/2.54.1/com.google.api.gax.rpc.StreamController)\n- [2.53.0](/java/docs/reference/gax/2.53.0/com.google.api.gax.rpc.StreamController)\n- [2.52.0](/java/docs/reference/gax/2.52.0/com.google.api.gax.rpc.StreamController)\n- [2.51.0](/java/docs/reference/gax/2.51.0/com.google.api.gax.rpc.StreamController)\n- [2.50.0](/java/docs/reference/gax/2.50.0/com.google.api.gax.rpc.StreamController)\n- [2.49.0](/java/docs/reference/gax/2.49.0/com.google.api.gax.rpc.StreamController)\n- [2.48.1](/java/docs/reference/gax/2.48.1/com.google.api.gax.rpc.StreamController)\n- [2.47.0](/java/docs/reference/gax/2.47.0/com.google.api.gax.rpc.StreamController)\n- [2.46.1](/java/docs/reference/gax/2.46.1/com.google.api.gax.rpc.StreamController)\n- [2.45.0](/java/docs/reference/gax/2.45.0/com.google.api.gax.rpc.StreamController)\n- [2.43.0](/java/docs/reference/gax/2.43.0/com.google.api.gax.rpc.StreamController)\n- [2.42.0](/java/docs/reference/gax/2.42.0/com.google.api.gax.rpc.StreamController)\n- [2.41.0](/java/docs/reference/gax/2.41.0/com.google.api.gax.rpc.StreamController)\n- [2.39.0](/java/docs/reference/gax/2.39.0/com.google.api.gax.rpc.StreamController)\n- [2.38.0](/java/docs/reference/gax/2.38.0/com.google.api.gax.rpc.StreamController)\n- [2.37.0](/java/docs/reference/gax/2.37.0/com.google.api.gax.rpc.StreamController)\n- [2.36.0](/java/docs/reference/gax/2.36.0/com.google.api.gax.rpc.StreamController)\n- [2.35.0](/java/docs/reference/gax/2.35.0/com.google.api.gax.rpc.StreamController)\n- [2.34.1](/java/docs/reference/gax/2.34.1/com.google.api.gax.rpc.StreamController)\n- [2.33.0](/java/docs/reference/gax/2.33.0/com.google.api.gax.rpc.StreamController)\n- [2.32.1](/java/docs/reference/gax/2.32.1/com.google.api.gax.rpc.StreamController)\n- [2.31.1](/java/docs/reference/gax/2.31.1/com.google.api.gax.rpc.StreamController)\n- [2.30.1](/java/docs/reference/gax/2.30.1/com.google.api.gax.rpc.StreamController)\n- [2.24.0](/java/docs/reference/gax/2.24.0/com.google.api.gax.rpc.StreamController)\n- [2.23.3](/java/docs/reference/gax/2.23.3/com.google.api.gax.rpc.StreamController)\n- [2.22.0](/java/docs/reference/gax/2.22.0/com.google.api.gax.rpc.StreamController)\n- [2.21.0](/java/docs/reference/gax/2.21.0/com.google.api.gax.rpc.StreamController)\n- [2.20.1](/java/docs/reference/gax/2.20.1/com.google.api.gax.rpc.StreamController)\n- [2.19.6](/java/docs/reference/gax/2.19.6/com.google.api.gax.rpc.StreamController)\n- [2.18.7](/java/docs/reference/gax/2.18.7/com.google.api.gax.rpc.StreamController)\n- [2.17.0](/java/docs/reference/gax/2.17.0/com.google.api.gax.rpc.StreamController)\n- [2.16.0](/java/docs/reference/gax/2.16.0/com.google.api.gax.rpc.StreamController)\n- [2.15.0](/java/docs/reference/gax/2.15.0/com.google.api.gax.rpc.StreamController)\n- [2.14.0](/java/docs/reference/gax/2.14.0/com.google.api.gax.rpc.StreamController)\n- [2.13.0](/java/docs/reference/gax/2.13.0/com.google.api.gax.rpc.StreamController)\n- [2.12.2](/java/docs/reference/gax/2.12.2/com.google.api.gax.rpc.StreamController)\n- [2.11.0](/java/docs/reference/gax/2.11.0/com.google.api.gax.rpc.StreamController)\n- [2.10.0](/java/docs/reference/gax/2.10.0/com.google.api.gax.rpc.StreamController)\n- [2.9.0](/java/docs/reference/gax/2.9.0/com.google.api.gax.rpc.StreamController)\n- [2.8.1](/java/docs/reference/gax/2.8.1/com.google.api.gax.rpc.StreamController)\n- [2.7.1](/java/docs/reference/gax/2.7.1/com.google.api.gax.rpc.StreamController) \n\n public interface StreamController\n\nAllows the implementer of [ResponseObserver](/java/docs/reference/gax/latest/com.google.api.gax.rpc.ResponseObserver) to control the flow of responses.\n\nAn instance of this class will be passed to [ResponseObserver#onStart(StreamController)](/java/docs/reference/gax/latest/com.google.api.gax.rpc.ResponseObserver#com_google_api_gax_rpc_ResponseObserver_onStart_com_google_api_gax_rpc_StreamController_), at which point the receiver can disable automatic\nflow control. The receiver can also save a reference to the instance and terminate the stream\nearly using `cancel()`.\n\nMethods\n-------\n\n### cancel()\n\n public abstract void cancel()\n\nCancel the stream early.\n\nThis will manifest as an onError on the [ResponseObserver](/java/docs/reference/gax/latest/com.google.api.gax.rpc.ResponseObserver) with the cause being a\nCancellationException.\n\n### disableAutoInboundFlowControl()\n\n public abstract void disableAutoInboundFlowControl()\n\nDisables automatic flow control.\n\nThe next response is requested immediately after the current response is processed by [ResponseObserver#onResponse(Object)](/java/docs/reference/gax/latest/com.google.api.gax.rpc.ResponseObserver#com_google_api_gax_rpc_ResponseObserver_onResponse_). If disabled, an application must make explicit calls to\n[#request](/java/docs/reference/gax/latest/com.google.api.gax.rpc.StreamController#com_google_api_gax_rpc_StreamController_request_) to receive messages.\n\n### request(int count)\n\n public abstract void request(int count)\n\nRequests up to the given number of responses from the call to be delivered to [ResponseObserver#onResponse(Object)](/java/docs/reference/gax/latest/com.google.api.gax.rpc.ResponseObserver#com_google_api_gax_rpc_ResponseObserver_onResponse_). No additional messages will be delivered.\n\nThis method can only be called after disabling automatic flow control.\n\nMessage delivery is guaranteed to be sequential in the order received. In addition, the\nlistener methods will not be accessed concurrently. While it is not guaranteed that the same\nthread will always be used, it is guaranteed that only a single thread will access the listener\nat a time.\n\nIf called multiple times, the number of messages able to delivered will be the sum of the\ncalls.\n\nThis method is safe to call from multiple threads without external synchronizaton."]]