public String getEncodedLocalName() { return Codec.encode(localName); }
private CompletableFuture<? extends Subscription> getDurableSubscription(String subscriptionName) { CompletableFuture<Subscription> subscriptionFuture = new CompletableFuture<>(); ledger.asyncOpenCursor(Codec.encode(subscriptionName), new OpenCursorCallback() { @Override public void openCursorComplete(ManagedCursor cursor, Object ctx) { if (log.isDebugEnabled()) { log.debug("[{}][{}] Opened cursor", topic, subscriptionName); } subscriptionFuture.complete(subscriptions.computeIfAbsent(subscriptionName, name -> new PersistentSubscription(PersistentTopic.this, subscriptionName, cursor))); } @Override public void openCursorFailed(ManagedLedgerException exception, Object ctx) { log.warn("[{}] Failed to create subscription for {}", topic, subscriptionName); USAGE_COUNT_UPDATER.decrementAndGet(PersistentTopic.this); subscriptionFuture.completeExceptionally(new PersistenceException(exception)); } }, null); return subscriptionFuture; }
@Override public CompletableFuture<Void> resetCursorAsync(String destination, String subName, long timestamp) { DestinationName ds = validateTopic(destination); String encodedSubName = Codec.encode(subName); return asyncPostRequest( persistentTopics.path(ds.getNamespace()).path(ds.getEncodedLocalName()).path("subscription") .path(encodedSubName).path("resetcursor").path(String.valueOf(timestamp)), Entity.entity("", MediaType.APPLICATION_JSON)); }
@Override public CompletableFuture<Void> skipMessagesAsync(String destination, String subName, long numMessages) { DestinationName ds = validateTopic(destination); String encodedSubName = Codec.encode(subName); return asyncPostRequest( persistentTopics.path(ds.getNamespace()).path(ds.getEncodedLocalName()).path("subscription") .path(encodedSubName).path("skip").path(String.valueOf(numMessages)), Entity.entity("", MediaType.APPLICATION_JSON)); }
@Override public CompletableFuture<Void> expireMessagesAsync(String destination, String subName, long expireTimeInSeconds) { DestinationName ds = validateTopic(destination); String encodedSubName = Codec.encode(subName); return asyncPostRequest( persistentTopics.path(ds.getNamespace()).path(ds.getEncodedLocalName()).path("subscription") .path(encodedSubName).path("expireMessages").path(String.valueOf(expireTimeInSeconds)), Entity.entity("", MediaType.APPLICATION_JSON)); }
@Override public void resetCursor(String destination, String subName, long timestamp) throws PulsarAdminException { try { DestinationName ds = validateTopic(destination); String encodedSubName = Codec.encode(subName); request( persistentTopics.path(ds.getNamespace()).path(ds.getEncodedLocalName()).path("subscription") .path(encodedSubName).path("resetcursor").path(String.valueOf(timestamp))).post( Entity.entity("", MediaType.APPLICATION_JSON), ErrorData.class); } catch (Exception e) { throw getApiException(e); } }
@Override public CompletableFuture<Void> skipAllMessagesAsync(String destination, String subName) { DestinationName ds = validateTopic(destination); String encodedSubName = Codec.encode(subName); return asyncPostRequest( persistentTopics.path(ds.getNamespace()).path(ds.getEncodedLocalName()).path("subscription") .path(encodedSubName).path("skip_all"), Entity.entity("", MediaType.APPLICATION_JSON)); }
CompletableFuture<Void> unsubscribeFuture = new CompletableFuture<>(); ledger.asyncDeleteCursor(Codec.encode(subscriptionName), new DeleteCursorCallback() { @Override public void deleteCursorComplete(Object ctx) {
@Override public CompletableFuture<Void> deleteSubscriptionAsync(String destination, String subName) { DestinationName ds = validateTopic(destination); String encodedSubName = Codec.encode(subName); return asyncDeleteRequest(persistentTopics.path(ds.getNamespace()).path(ds.getEncodedLocalName()) .path("subscription").path(encodedSubName)); }
private CompletableFuture<Message> peekNthMessage(String destination, String subName, int messagePosition) { DestinationName ds = validateTopic(destination); String encodedSubName = Codec.encode(subName); final CompletableFuture<Message> future = new CompletableFuture<Message>(); asyncGetRequest(persistentTopics.path(ds.getNamespace()).path(ds.getEncodedLocalName()).path("subscription") .path(encodedSubName).path("position").path(String.valueOf(messagePosition)), new InvocationCallback<Response>() { @Override public void completed(Response response) { try { Message msg = getMessageFromHttpResponse(response); future.complete(msg); } catch (Exception e) { future.completeExceptionally(getApiException(e)); } } @Override public void failed(Throwable throwable) { future.completeExceptionally(getApiException(throwable.getCause())); } }); return future; }