private void pingServer() { Request request = Request.newBuilder().build(); request.setReplyTo(replyToTopic); request.setType(RequestType.ping); boolean connected = false; int attempts = 10; requestResponseMatcher.addRequestCallback(request.getCorrelationId(), pingFuture::complete); logger.debug("Request callback added for request: {}, correlationId: {}", request.getBody(), request.getCorrelationId()); requestProducer.send(new ProducerRecord<>(requestTopic, request.getPartitionKey(), request)); continue; } finally { requestResponseMatcher.removeRequestCallback(request.getCorrelationId());
@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"); } }
@Override public void onEvent(ServerEvent event) throws Exception { final Request request = event.get(); final String replyTo = request.getReplyTo(); Response response; switch (request.getType()) { case clientRequest: logger.debug("Client request received {}", request); response = handleClientRequest(request); break; case ping: logger.info("Ping request received from {}", replyTo); response = Response.newBuilder().buildSuccess(); break; default: logger.warn("Unknown type of request received {} from client with topic {}, correlationId = {}", request.getType(), replyTo, request.getCorrelationId()); response = Response.newBuilder() .buildFailed(404); } // set correlationId explicitly to prevent missing it in request response.setCorrelationId(request.getCorrelationId()); send(replyTo, response); }
@Override public void call(Request request, Consumer<Response> callback) { requestResponseMatcher.addRequestCallback(request.getCorrelationId(), callback); logger.debug("Request callback added for request: {}, correlationId: {}", request.getBody(), request.getCorrelationId()); push(request); }
@Override public void push(Request request) { if (request.getBody() == null) { throw new NullPointerException("Request body must not be null."); } request.setReplyTo(replyToTopic); requestProducer.send(new ProducerRecord<>(requestTopic, request.getPartitionKey(), request), (recordMetadata, e) -> { if (e != null) { logger.error("Send request failed", e); requestResponseMatcher.removeRequestCallback(request.getCorrelationId()); } logger.debug("Request {} sent successfully", request.getCorrelationId()); //TODO [rafa] in case sending fails - we need to notify the caller using the callback passed. }); }
@Override public void push(Request request) { if (request.getBody() == null) { throw new NullPointerException("Request body must not be null."); } request.setReplyTo(replyToTopic); client.push(ProxyMessageBuilder.notification( new NotificationCreatePayload(requestTopic, gson.toJson(request), request.getPartitionKey()))); }
public CompletableFuture<EntityCountResponse> count(CountPluginRequest countPluginRequest) { CompletableFuture<com.devicehive.shim.api.Response> future = new CompletableFuture<>(); rpcClient.call(Request .newBuilder() .withBody(countPluginRequest) .build(), new ResponseConsumer(future)); return future.thenApply(response -> new EntityCountResponse((CountResponse) response.getBody())); }
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); }
@Override @SuppressWarnings("unchecked") public Response handle(Request request) { final Action action = request.getBody().getAction(); try { return Optional.ofNullable(requestHandlersMapper.requestHandlerMap().get(action)) .map(handler -> handler.handle(request)) .orElseThrow(() -> new RuntimeException("Action '" + action + "' is not supported.")); } catch (Exception e) { logger.error("Unable to handle request.", e); return Response.newBuilder() .withBody(new ErrorResponse(e.getMessage())) .withLast(true) .buildFailed(HttpStatus.INTERNAL_SERVER_ERROR.value()); } } }
@Override public void push(Request request) { if (request.getBody() == null) { throw new NullPointerException("Request body must not be null."); } request.setReplyTo(replyToTopic); client.push(ProxyMessageBuilder.notification(new NotificationCreatePayload(requestTopic, gson.toJson(request)))); // toDo: use request partition key }
private Response handleClientRequest(Request request) { Response response; try { response = Optional.ofNullable(requestHandler.handle(request)) .orElseThrow(() -> new NullPointerException("Response must not be null")); } catch (Exception e) { logger.error("Unexpected exception occurred during request handling (action='{}', handler='{}')", request.getBody().getAction().name(), requestHandler.getClass().getCanonicalName(), e); response = Response.newBuilder() .withLast(request.isSingleReplyExpected()) .buildFailed(500); } return response; }
public CompletableFuture<EntityCountResponse> count(CountUserRequest countUserRequest) { CompletableFuture<Response> future = new CompletableFuture<>(); rpcClient.call(Request .newBuilder() .withBody(countUserRequest) .build(), new ResponseConsumer(future)); return future.thenApply(response -> new EntityCountResponse((CountResponse)response.getBody())); }
@Override public void call(Request request, Consumer<Response> callback) { requestResponseMatcher.addRequestCallback(request.getCorrelationId(), callback); logger.debug("Request callback added for request: {}, correlationId: {}", request.getBody(), request.getCorrelationId()); push(request); }
private Response removeNotificationSubscription(PluginUnsubscribeRequest body) { NotificationUnsubscribeRequest notificationUnsubscribeRequest = new NotificationUnsubscribeRequest(ImmutableSet.of(body.getSubscriptionId())); Request notificationRequest = Request.newBuilder() .withBody(notificationUnsubscribeRequest) .withSingleReply(false) .build(); notificationRequest.setReplyTo(body.getTopicName()); return notificationUnsubscribeRequestHandler.handle(notificationRequest); }
@Override public Response handle(Request request) { NotificationSearchRequest searchRequest = (NotificationSearchRequest) request.getBody(); NotificationSearchResponse payload = searchRequest.getId() != null && !StringUtils.isEmpty(searchRequest.getDeviceId()) ? searchSingleNotificationByDeviceAndId(searchRequest.getId(), searchRequest.getDeviceId()) : searchMultipleNotifications(searchRequest); return Response.newBuilder() .withBody(payload) .buildSuccess(); }
@Override public void onEvent(ServerEvent serverEvent) throws Exception { final Request request = serverEvent.get(); if (request.getBody() == null) { throw new NullPointerException("Request body must not be null."); } request.setReplyTo(replyToTopic); proxyClient.push(ProxyMessageBuilder.notification( new NotificationCreatePayload(requestTopic, gson.toJson(request), request.getPartitionKey()))); } }
@Override public void push(Request request) { if (request.getBody() == null) { throw new NullPointerException("Request body must not be null."); } request.setReplyTo(replyToTopic); client.push(ProxyMessageBuilder.notification(new NotificationCreatePayload(requestTopic, gson.toJson(request)))); // toDo: use request partition key }
private Response handleClientRequest(Request request) { Response response; final Action action = request.getBody().getAction(); RequestHandler requestHandler = requestHandlersMapper.requestHandlerMap().get(action); if (requestHandler == null) { throw new RuntimeException("Action '" + action + "' is not supported."); } try { response = Optional.ofNullable(requestHandler.handle(request)) .orElseThrow(() -> new NullPointerException("Response must not be null")); } catch (Exception e) { logger.error("Unexpected exception occurred during request handling (action='{}', handler='{}')", request.getBody().getAction().name(), requestHandler.getClass().getCanonicalName(), e); response = Response.newBuilder() .withLast(request.isSingleReplyExpected()) .buildFailed(500); } return response; } }
private void pingServer() { Request request = Request.newBuilder().build(); request.setReplyTo(replyToTopic); request.setType(RequestType.ping); boolean connected = false; int attempts = 10; requestResponseMatcher.addRequestCallback(request.getCorrelationId(), pingFuture::complete); logger.debug("Request callback added for request: {}, correlationId: {}", request.getBody(), request.getCorrelationId()); new NotificationCreatePayload(requestTopic, gson.toJson(request), request.getPartitionKey()))); continue; } finally { requestResponseMatcher.removeRequestCallback(request.getCorrelationId());
public CompletableFuture<EntityCountResponse> count(CountNetworkRequest countNetworkRequest) { CompletableFuture<Response> future = new CompletableFuture<>(); rpcClient.call(Request .newBuilder() .withBody(countNetworkRequest) .build(), new ResponseConsumer(future)); return future.thenApply(response -> new EntityCountResponse((CountResponse)response.getBody())); }