public SubscriptionBuilder withRequestTimeout(int timeout) { SubscriptionPolicy policy = this.serialSubscriptionPolicy; this.serialSubscriptionPolicy = SubscriptionPolicy.Builder.subscriptionPolicy().withRate(policy.getRate()) .withMessageTtl(policy.getMessageTtl()).withMessageBackoff(policy.getMessageBackoff()) .withRequestTimeout(timeout).build(); return this; }
private boolean shouldRetryOnClientError() { return subscription.getSerialSubscriptionPolicy().isRetryClientErrors(); }
description, validDeliveryType == DeliveryType.SERIAL ? SubscriptionPolicy.create(validSubscriptionPolicy) : BatchSubscriptionPolicy.create(validSubscriptionPolicy), validTrackingEnabled, validTrackingMode,
private long extractRetryDelay(MessageSendingResult result) { long defaultBackoff = subscription.getSerialSubscriptionPolicy().getMessageBackoff(); long ttl = TimeUnit.SECONDS.toMillis(subscription.getSerialSubscriptionPolicy().getMessageTtl()); return result.getRetryAfterMillis().map(delay -> Math.min(delay, ttl)).orElse(defaultBackoff); }
@Test public void shouldApplyPatch() { // given SubscriptionPolicy policy = SubscriptionPolicy.create(new HashMap<>()); PatchData patch = patchData().set("rate", 10).set("messageTtl", 30).build(); // when SubscriptionPolicy patched = Patch.apply(policy, patch); // when & then assertThat(patched.getRate()).isEqualTo(10); assertThat(patched.getMessageTtl()).isEqualTo(30); }
@Override public double get() { int consumersCount = activeConsumerCounter.countActiveConsumers(subscription); double subscriptionRate = subscription.getSerialSubscriptionPolicy().getRate().doubleValue(); return subscriptionRate / Math.max(consumersCount, 1); }
@Test public void shouldPatchNestedObjects() { // given Subscription subscription = subscription("group.topic", "sub").build(); PatchData patch = patchData().set( "subscriptionPolicy", patchData().set("rate", 200).set("messageTtl", 8).build().getPatch() ).build(); // when SubscriptionPolicy result = Patch.apply(subscription, patch).getSerialSubscriptionPolicy(); // then assertThat(result.getMessageTtl()).isEqualTo(8); assertThat(result.getRate()).isEqualTo(200); }
private boolean willExceedTtl(Message message, long delay) { long ttl = TimeUnit.SECONDS.toMillis(subscription.getSerialSubscriptionPolicy().getMessageTtl()); long remainingTtl = Math.max(ttl - delay, 0); return message.isTtlExceeded(remainingTtl); }
@Test public void shouldDeserializeSubscriptionWithoutBackoff() throws Exception { // given String json = "{\"name\": \"test\", \"endpoint\": \"http://localhost:8888\", \"subscriptionPolicy\": {\"messageTtl\": 100}}"; // when Subscription subscription = mapper.readValue(json, Subscription.class); // then assertThat(subscription.getSerialSubscriptionPolicy().getMessageBackoff()).isEqualTo(100); }
public ConsumerMessageSender(Subscription subscription, MessageSenderFactory messageSenderFactory, List<SuccessHandler> successHandlers, List<ErrorHandler> errorHandlers, SerialConsumerRateLimiter rateLimiter, ExecutorService deliveryReportingExecutor, InflightsPool inflight, HermesMetrics hermesMetrics, int asyncTimeoutMs, FutureAsyncTimeout<MessageSendingResult> futureAsyncTimeout) { this.deliveryReportingExecutor = deliveryReportingExecutor; this.successHandlers = successHandlers; this.errorHandlers = errorHandlers; this.rateLimiter = rateLimiter; this.messageSenderFactory = messageSenderFactory; this.messageSender = messageSenderFactory.create(subscription); this.subscription = subscription; this.inflight = inflight; this.async = futureAsyncTimeout; this.requestTimeoutMs = subscription.getSerialSubscriptionPolicy().getRequestTimeout(); this.asyncTimeoutMs = asyncTimeoutMs; this.consumerLatencyTimer = hermesMetrics.latencyTimer(subscription); }
private int calculateInflightSize(Subscription subscription) { return Math.min( subscription.getSerialSubscriptionPolicy().getInflightSize(), defaultInflight ); }
private int delayForSubscription() { return subscription.getSerialSubscriptionPolicy().getSendingDelay(); }
private long extractRetryDelay(MessageSendingResult result) { long defaultBackoff = subscription.getSerialSubscriptionPolicy().getMessageBackoff(); long ttl = TimeUnit.SECONDS.toMillis(subscription.getSerialSubscriptionPolicy().getMessageTtl()); return result.getRetryAfterMillis().map(delay -> Math.min(delay, ttl)).orElse(defaultBackoff); }
@Override public double get() { int consumersCount = activeConsumerCounter.countActiveConsumers(subscription); double subscriptionRate = subscription.getSerialSubscriptionPolicy().getRate().doubleValue(); return subscriptionRate / Math.max(consumersCount, 1); }
private boolean willExceedTtl(Message message, long delay) { long ttl = TimeUnit.SECONDS.toMillis(subscription.getSerialSubscriptionPolicy().getMessageTtl()); long remainingTtl = Math.max(ttl - delay, 0); return message.isTtlExceeded(remainingTtl); }
private HttpRequestFactory httpRequestFactory(Subscription subscription) { int requestTimeout = subscription.getSerialSubscriptionPolicy().getRequestTimeout(); return new HttpRequestFactory(getHttpClient(subscription), requestTimeout, metadataAppender, authorizationProviderFactory.create(subscription)); }
private int calculateInflightSize(Subscription subscription) { return Math.min( subscription.getSerialSubscriptionPolicy().getInflightSize(), defaultInflight ); }
private int delayForSubscription() { return subscription.getSerialSubscriptionPolicy().getSendingDelay(); }
public SubscriptionBuilder withRequestTimeout(int timeout) { SubscriptionPolicy policy = this.serialSubscriptionPolicy; this.serialSubscriptionPolicy = SubscriptionPolicy.Builder.subscriptionPolicy().withRate(policy.getRate()) .withMessageTtl(policy.getMessageTtl()).withMessageBackoff(policy.getMessageBackoff()) .withRequestTimeout(timeout).build(); return this; }
@Override public void updateSubscription(Subscription newSubscription) { this.subscription = newSubscription; this.filterRateLimiter.setRate(newSubscription.getSerialSubscriptionPolicy().getRate()); this.outputRateCalculator.updateSubscription(newSubscription); }