Search in sources :

Example 1 with SubscribeResponse

use of com.hedera.mirror.monitor.subscribe.SubscribeResponse in project hedera-mirror-node by hashgraph.

the class RestSubscriber method clientSubscribe.

private Flux<SubscribeResponse> clientSubscribe(RestSubscription subscription) {
    RestSubscriberProperties properties = subscription.getProperties();
    RetryBackoffSpec retrySpec = Retry.backoff(properties.getRetry().getMaxAttempts(), properties.getRetry().getMinBackoff()).maxBackoff(properties.getRetry().getMaxBackoff()).filter(this::shouldRetry).doBeforeRetry(r -> log.debug("Retry attempt #{} after failure: {}", r.totalRetries() + 1, r.failure().getMessage()));
    return subscription.getSink().asFlux().publishOn(Schedulers.parallel()).doFinally(s -> subscription.onComplete()).doOnNext(publishResponse -> log.trace("Querying REST API: {}", publishResponse)).flatMap(publishResponse -> webClient.get().uri("/transactions/{transactionId}", toString(publishResponse.getTransactionId())).retrieve().bodyToMono(MirrorTransaction.class).name("rest").metrics().timeout(properties.getTimeout()).retryWhen(retrySpec).onErrorContinue((t, o) -> subscription.onError(t)).doOnNext(subscription::onNext).map(transaction -> toResponse(subscription, publishResponse, transaction))).take(properties.getLimit(), true).take(properties.getDuration());
}
Also used : TransactionId(com.hedera.hashgraph.sdk.TransactionId) Retry(reactor.util.retry.Retry) SubscribeProperties(com.hedera.mirror.monitor.subscribe.SubscribeProperties) MirrorSubscriber(com.hedera.mirror.monitor.subscribe.MirrorSubscriber) Collection(java.util.Collection) MediaType(org.springframework.http.MediaType) Set(java.util.Set) WebClient(org.springframework.web.reactive.function.client.WebClient) RetryBackoffSpec(reactor.util.retry.RetryBackoffSpec) Instant(java.time.Instant) ArrayList(java.util.ArrayList) SecureRandom(java.security.SecureRandom) MirrorTransaction(com.hedera.mirror.monitor.subscribe.rest.response.MirrorTransaction) HttpStatus(org.springframework.http.HttpStatus) Flux(reactor.core.publisher.Flux) PublishResponse(com.hedera.mirror.monitor.publish.PublishResponse) List(java.util.List) Log4j2(lombok.extern.log4j.Log4j2) Schedulers(reactor.core.scheduler.Schedulers) WebClientResponseException(org.springframework.web.reactive.function.client.WebClientResponseException) Named(javax.inject.Named) MonitorProperties(com.hedera.mirror.monitor.MonitorProperties) SubscribeResponse(com.hedera.mirror.monitor.subscribe.SubscribeResponse) RetryBackoffSpec(reactor.util.retry.RetryBackoffSpec)

Aggregations

TransactionId (com.hedera.hashgraph.sdk.TransactionId)1 MonitorProperties (com.hedera.mirror.monitor.MonitorProperties)1 PublishResponse (com.hedera.mirror.monitor.publish.PublishResponse)1 MirrorSubscriber (com.hedera.mirror.monitor.subscribe.MirrorSubscriber)1 SubscribeProperties (com.hedera.mirror.monitor.subscribe.SubscribeProperties)1 SubscribeResponse (com.hedera.mirror.monitor.subscribe.SubscribeResponse)1 MirrorTransaction (com.hedera.mirror.monitor.subscribe.rest.response.MirrorTransaction)1 SecureRandom (java.security.SecureRandom)1 Instant (java.time.Instant)1 ArrayList (java.util.ArrayList)1 Collection (java.util.Collection)1 List (java.util.List)1 Set (java.util.Set)1 Named (javax.inject.Named)1 Log4j2 (lombok.extern.log4j.Log4j2)1 HttpStatus (org.springframework.http.HttpStatus)1 MediaType (org.springframework.http.MediaType)1 WebClient (org.springframework.web.reactive.function.client.WebClient)1 WebClientResponseException (org.springframework.web.reactive.function.client.WebClientResponseException)1 Flux (reactor.core.publisher.Flux)1