@Bean public RequestResponseMatcher requestResponseMatcher() { return new RequestResponseMatcher(); }
@Override public void process(ConsumerRecord<String, Response> record) { responseMatcher.offerResponse(record.value()); } }
@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); }
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 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. }); }
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; } }
requestResponseMatcher.addRequestCallback(request.getCorrelationId(), pingFuture::complete); logger.debug("Request callback added for request: {}, correlationId: {}", request.getBody(), request.getCorrelationId()); continue; } finally { requestResponseMatcher.removeRequestCallback(request.getCorrelationId());
@Bean public RequestResponseMatcher requestResponseMatcher() { return new RequestResponseMatcher(); }
@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 handle(String message, ProxyClient client) { logger.debug("Received message from proxy client: " + message); final Response response = gson.fromJson(message, Response.class); requestResponseMatcher.offerResponse(response); }
requestResponseMatcher.addRequestCallback(request.getCorrelationId(), pingFuture::complete); logger.debug("Request callback added for request: {}, correlationId: {}", request.getBody(), request.getCorrelationId()); continue; } finally { requestResponseMatcher.removeRequestCallback(request.getCorrelationId());
@Bean public RequestResponseMatcher requestResponseMatcher() { return new RequestResponseMatcher(); }
@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 handle(String message, ProxyClient client) { logger.debug("Received message from proxy client: " + message); final Response response = gson.fromJson(message, Response.class); requestResponseMatcher.offerResponse(response); } }
requestResponseMatcher.addRequestCallback(request.getCorrelationId(), pingFuture::complete); logger.debug("Request callback added for request: {}, correlationId: {}", request.getBody(), request.getCorrelationId()); continue; } finally { requestResponseMatcher.removeRequestCallback(request.getCorrelationId());
@Bean public RequestResponseMatcher requestResponseMatcher() { return new RequestResponseMatcher(); }
@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); }
@Bean public RequestResponseMatcher requestResponseMatcher() { return new RequestResponseMatcher(); }
@Bean public RequestResponseMatcher requestResponseMatcher() { return new RequestResponseMatcher(); }
public RpcClient build() { RequestResponseMatcher matcher = new RequestResponseMatcher(); ExecutorService consumerExecutor = Executors.newFixedThreadPool(consumerThreads); ServerResponseListener responseListener = new ServerResponseListener(replyTopic, consumerThreads, matcher, consumerProps, consumerExecutor, consumerValueDeserializer); Producer<String, Request> requestProducer = new KafkaProducer<>(producerProps, new StringSerializer(), producerValueSerializer); return new KafkaRpcClient(requestTopic, replyTopic, requestProducer, matcher, responseListener); }