com.salesforce.reactivegrpccommon.ReactiveProducerStreamObserver Maven / Gradle / Ivy
/*
* Copyright (c) 2017, salesforce.com, inc.
* All rights reserved.
* Licensed under the BSD 3-Clause license.
* For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
*/
package com.salesforce.reactivegrpccommon;
import com.google.common.base.Preconditions;
import com.salesforce.grpc.contrib.LambdaStreamObserver;
import io.grpc.stub.ClientCallStreamObserver;
import io.grpc.stub.ClientResponseObserver;
import org.reactivestreams.Publisher;
import java.util.function.Consumer;
/**
* LambdaStreamObserver configures client-side manual flow control for the producing end of a message stream.
*
* @param
* @param
*/
public class ReactiveProducerStreamObserver extends LambdaStreamObserver implements ClientResponseObserver {
private Publisher rxProducer;
private ReactivePublisherBackpressureOnReadyHandler onReadyHandler;
public ReactiveProducerStreamObserver(Publisher rxProducer, Consumer onNext, Consumer onError, Runnable onCompleted) {
super(
Preconditions.checkNotNull(onNext),
Preconditions.checkNotNull(onError),
Preconditions.checkNotNull(onCompleted)
);
this.rxProducer = Preconditions.checkNotNull(rxProducer);
}
@Override
public void beforeStart(ClientCallStreamObserver producerStream) {
Preconditions.checkNotNull(producerStream);
// Subscribe to the rxProducer with an adapter to a gRPC StreamObserver that respects backpressure
// signals from the underlying gRPC client transport.
onReadyHandler = new ReactivePublisherBackpressureOnReadyHandler<>(producerStream);
}
public void rxSubscribe() {
rxProducer.subscribe(onReadyHandler);
}
public void cancel() {
onReadyHandler.cancel();
}
} © 2015 - 2025 Weber Informatics LLC | Privacy Policy