@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 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 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 call(Request request, Consumer<Response> callback) { requestResponseMatcher.addRequestCallback(request.getCorrelationId(), callback); logger.debug("Request callback added for request: {}, correlationId: {}", request.getBody(), request.getCorrelationId()); ringBuffer.publishEvent((serverEvent, sequence, response) -> serverEvent.set(response), 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. }); }
requestResponseMatcher.addRequestCallback(request.getCorrelationId(), pingFuture::complete); logger.debug("Request callback added for request: {}, correlationId: {}", request.getBody(), request.getCorrelationId()); continue; } finally { requestResponseMatcher.removeRequestCallback(request.getCorrelationId());
requestResponseMatcher.addRequestCallback(request.getCorrelationId(), pingFuture::complete); logger.debug("Request callback added for request: {}, correlationId: {}", request.getBody(), request.getCorrelationId()); continue; } finally { requestResponseMatcher.removeRequestCallback(request.getCorrelationId());
requestResponseMatcher.addRequestCallback(request.getCorrelationId(), pingFuture::complete); logger.debug("Request callback added for request: {}, correlationId: {}", request.getBody(), request.getCorrelationId()); continue; } finally { requestResponseMatcher.removeRequestCallback(request.getCorrelationId());
requestResponseMatcher.addRequestCallback(request.getCorrelationId(), pingFuture::complete); logger.debug("Request callback added for request: {}, correlationId: {}", request.getBody(), request.getCorrelationId()); continue; } finally { requestResponseMatcher.removeRequestCallback(request.getCorrelationId());
@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 onEvent(ServerEvent serverEvent) throws Exception { final Request request = serverEvent.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()); ProxyMessage responseMessage = ProxyMessageBuilder.notification(new NotificationCreatePayload(replyTo, gson.toJson(response))); proxyClient.push(responseMessage); }
@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 Response handle(Request request) { NotificationUnsubscribeRequest body = (NotificationUnsubscribeRequest) 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); } NotificationUnsubscribeResponse unsubscribeResponse = new NotificationUnsubscribeResponse(body.getSubscriptionIds()); return Response.newBuilder() .withBody(unsubscribeResponse) .withCorrelationId(request.getCorrelationId()) .buildSuccess(); } else { throw new IllegalArgumentException("Subscription ids are null"); } }
@Override public Response handle(Request request) { final DeviceDeleteRequest req = (DeviceDeleteRequest) request.getBody(); final DeviceVO device = req.getDevice(); eventBus.unsubscribeDevice(device); return Response.newBuilder() .withBody(new DeviceDeleteResponse()) .withCorrelationId(request.getCorrelationId()) .buildSuccess(); } }
@Override public Response handle(Request request) { final CommandUpdateSubscribeRequest body = request.getBody().cast(CommandUpdateSubscribeRequest.class); final Subscriber subscriber = new Subscriber(body.getSubscriptionId(), request.getReplyTo(), request.getCorrelationId()); eventBus.subscribe(body.getFilter(), subscriber); final DeviceCommand deviceCommand = hazelcastService .find(body.getCommandId(), body.getDeviceId(), DeviceCommand.class) .orElse(null); return Response.newBuilder() .withBody(new CommandUpdateSubscribeResponse(body.getSubscriptionId(), deviceCommand)) .withLast(false) .withCorrelationId(request.getCorrelationId()) .buildSuccess(); } }
@Override public Response handle(Request request) { NotificationSubscribeRequest body = (NotificationSubscribeRequest) request.getBody(); validate(body); Subscriber subscriber = new Subscriber(body.getSubscriptionId(), request.getReplyTo(), request.getCorrelationId()); Filter filter = body.getFilter(); eventBus.subscribe(filter, subscriber); Collection<DeviceNotification> notifications = findNotifications(filter, body.getNames(), body.getTimestamp()); NotificationSubscribeResponse subscribeResponse = new NotificationSubscribeResponse(body.getSubscriptionId(), notifications); return Response.newBuilder() .withBody(subscribeResponse) .withLast(false) .withCorrelationId(request.getCorrelationId()) .buildSuccess(); }
@Override public Response handle(Request request) { PluginUnsubscribeRequest body = (PluginUnsubscribeRequest) request.getBody(); validate(body); removeCommandSubscription(body); removeNotificationSubscription(body); return Response.newBuilder() .withBody(new PluginUnsubscribeResponse(body.getSubscriptionId())) .withLast(false) .withCorrelationId(request.getCorrelationId()) .buildSuccess(); }
@Override public Response handle(Request request) { CommandSubscribeRequest body = (CommandSubscribeRequest) request.getBody(); validate(body); Subscriber subscriber = new Subscriber(body.getSubscriptionId(), request.getReplyTo(), request.getCorrelationId()); Filter filter = body.getFilter(); if (body.isReturnUpdated()) { filter.setEventName(COMMANDS_UPDATE_EVENT.name()); } eventBus.subscribe(filter, subscriber); Collection<DeviceCommand> commands = findCommands(filter, body.getNames(), body.getTimestamp(), body.isReturnUpdated(), body.getLimit()); CommandSubscribeResponse subscribeResponse = new CommandSubscribeResponse(body.getSubscriptionId(), commands); return Response.newBuilder() .withBody(subscribeResponse) .withLast(false) .withCorrelationId(request.getCorrelationId()) .buildSuccess(); }
@Override public Response handle(Request request) { PluginSubscribeRequest body = (PluginSubscribeRequest) request.getBody(); validate(body); if (body.isReturnCommands()) { createCommandSubscription(body, false); } if (body.isReturnUpdatedCommands()) { createCommandSubscription(body, true); } if (body.isReturnNotifications()) { createNotificationSubscription(body); } return Response.newBuilder() .withBody(new PluginSubscribeResponse(body.getSubscriptionId())) .withLast(false) .withCorrelationId(request.getCorrelationId()) .buildSuccess(); }