public CompletableFuture<Set<Long>> sendUnsubscribeRequest(Set<Long> subIds) { CommandUnsubscribeRequest unsubscribeRequest = new CommandUnsubscribeRequest(subIds); Request request = Request.newBuilder() .withBody(unsubscribeRequest) .build(); CompletableFuture<Set<Long>> future = new CompletableFuture<>(); Consumer<Response> responseConsumer = response -> { Action resAction = response.getBody().getAction(); if (resAction.equals(Action.COMMAND_UNSUBSCRIBE_RESPONSE)) { future.complete(response.getBody().cast(CommandUnsubscribeResponse.class).getSubscriptionIds()); subIds.forEach(requestResponseMatcher::removeSubscription); } else { logger.warn("Unknown action received from backend {}", resAction); } }; rpcClient.call(request, responseConsumer); return future; }
@Override public Response handle(Request request) { CommandUnsubscribeRequest body = (CommandUnsubscribeRequest) request.getBody(); validate(body); if (body.getSubscriptionIds() != null) { for (Long subId : body.getSubscriptionIds()) { Subscriber subscriber = new Subscriber(subId, request.getReplyTo(), request.getCorrelationId()); eventBus.unsubscribe(subscriber); } CommandUnsubscribeResponse unsubscribeResponse = new CommandUnsubscribeResponse(body.getSubscriptionIds()); return Response.newBuilder() .withBody(unsubscribeResponse) .withCorrelationId(request.getCorrelationId()) .buildSuccess(); } else { throw new IllegalArgumentException("Subscription ids are null"); } }
private Response removeCommandSubscription(PluginUnsubscribeRequest body) { CommandUnsubscribeRequest commandUnsubscribeRequest = new CommandUnsubscribeRequest(ImmutableSet.of(body.getSubscriptionId())); Request commandRequest = Request.newBuilder() .withBody(commandUnsubscribeRequest) .withSingleReply(false) .build(); commandRequest.setReplyTo(body.getTopicName()); return commandUnsubscribeRequestHandler.handle(commandRequest); }