@Override public <R, Q> Stream<R> scatterGather(String queryName, Q query, ResponseType<R> responseType, long timeout, TimeUnit timeUnit) { GenericQueryMessage<Q, R> queryMessage = new GenericQueryMessage<>(query, queryName, responseType); return queryBus.scatterGather(processInterceptors(queryMessage), timeout, timeUnit) .map(QueryResponseMessage::getPayload); }
@Override public <R, Q> CompletableFuture<R> query(String queryName, Q query, ResponseType<R> responseType) { CompletableFuture<QueryResponseMessage<R>> queryResponse = queryBus .query(processInterceptors(new GenericQueryMessage<>(query, queryName, responseType))); CompletableFuture<R> result = new CompletableFuture<>(); queryResponse.exceptionally(cause -> asResponseMessage(responseType.responseMessagePayloadType(), cause)) .thenAccept(queryResponseMessage -> { try { if (queryResponseMessage.isExceptional()) { result.completeExceptionally(queryResponseMessage.exceptionResult()); } else { result.complete(queryResponseMessage.getPayload()); } } catch (Exception e) { result.completeExceptionally(e); } }); return result; }
@Override public <Q, I, U> SubscriptionQueryResult<I, U> subscriptionQuery(String queryName, Q query, ResponseType<I> initialResponseType, ResponseType<U> updateResponseType, SubscriptionQueryBackpressure backpressure, int updateBufferSize) { SubscriptionQueryMessage<Q, I, U> subscriptionQueryMessage = new GenericSubscriptionQueryMessage<>(query, queryName, initialResponseType, updateResponseType); SubscriptionQueryResult<QueryResponseMessage<I>, SubscriptionQueryUpdateMessage<U>> result = queryBus .subscriptionQuery(processInterceptors(subscriptionQueryMessage), backpressure, updateBufferSize); return new DefaultSubscriptionQueryResult<>( result.initialResult() .filter(initialResult -> Objects.nonNull(initialResult.getPayload())) .map(Message::getPayload) .onErrorMap(e -> e instanceof IllegalPayloadAccessException ? e.getCause() : e), result.updates() .filter(update -> Objects.nonNull(update.getPayload())) .map(SubscriptionQueryUpdateMessage::getPayload), result ); }
@Override public <R, Q> Stream<R> scatterGather(String queryName, Q query, ResponseType<R> responseType, long timeout, TimeUnit timeUnit) { GenericQueryMessage<Q, R> queryMessage = new GenericQueryMessage<>(query, queryName, responseType); return queryBus.scatterGather(processInterceptors(queryMessage), timeout, timeUnit) .map(QueryResponseMessage::getPayload); }
@Override public <R, Q> CompletableFuture<R> query(String queryName, Q query, ResponseType<R> responseType) { return queryBus.query(processInterceptors(new GenericQueryMessage<>(query, queryName, responseType))) .thenApply(QueryResponseMessage::getPayload); }
@Override public <R, Q> Stream<R> scatterGather(String queryName, Q query, ResponseType<R> responseType, long timeout, TimeUnit timeUnit) { GenericQueryMessage<Q, R> queryMessage = new GenericQueryMessage<>(query, queryName, responseType); return queryBus.scatterGather(processInterceptors(queryMessage), timeout, timeUnit) .map(QueryResponseMessage::getPayload); }
@Override public <R, Q> CompletableFuture<R> query(String queryName, Q query, ResponseType<R> responseType) { CompletableFuture<QueryResponseMessage<R>> queryResponse = queryBus .query(processInterceptors(new GenericQueryMessage<>(query, queryName, responseType))); CompletableFuture<R> result = new CompletableFuture<>(); queryResponse.exceptionally(cause -> asResponseMessage(responseType.responseMessagePayloadType(), cause)) .thenAccept(queryResponseMessage -> { if (queryResponseMessage.isExceptional()) { result.completeExceptionally(queryResponseMessage.exceptionResult()); } else { result.complete(queryResponseMessage.getPayload()); } }); return result; }
@Override public <Q, I, U> SubscriptionQueryResult<I, U> subscriptionQuery(String queryName, Q query, ResponseType<I> initialResponseType, ResponseType<U> updateResponseType, SubscriptionQueryBackpressure backpressure, int updateBufferSize) { SubscriptionQueryMessage<Q, I, U> subscriptionQueryMessage = new GenericSubscriptionQueryMessage<>(query, queryName, initialResponseType, updateResponseType); SubscriptionQueryResult<QueryResponseMessage<I>, SubscriptionQueryUpdateMessage<U>> result = queryBus .subscriptionQuery(processInterceptors(subscriptionQueryMessage), backpressure, updateBufferSize); return new DefaultSubscriptionQueryResult<>( result.initialResult() .filter(initialResult -> Objects.nonNull(initialResult.getPayload())) .map(Message::getPayload) .onErrorMap(e -> e instanceof IllegalPayloadAccessException ? e.getCause() : e), result.updates() .filter(update -> Objects.nonNull(update.getPayload())) .map(SubscriptionQueryUpdateMessage::getPayload), result ); }
@Override public <Q, I, U> SubscriptionQueryResult<I, U> subscriptionQuery(String queryName, Q query, ResponseType<I> initialResponseType, ResponseType<U> updateResponseType, SubscriptionQueryBackpressure backpressure, int updateBufferSize) { SubscriptionQueryMessage<Q, I, U> subscriptionQueryMessage = new GenericSubscriptionQueryMessage<>(query, queryName, initialResponseType, updateResponseType); SubscriptionQueryResult<QueryResponseMessage<I>, SubscriptionQueryUpdateMessage<U>> result = queryBus .subscriptionQuery(processInterceptors(subscriptionQueryMessage), backpressure, updateBufferSize); return new DefaultSubscriptionQueryResult<>( result.initialResult() .filter(initialResult -> Objects.nonNull(initialResult.getPayload())) .map(QueryResponseMessage::getPayload), result.updates() .filter(update -> Objects.nonNull(update.getPayload())) .map(SubscriptionQueryUpdateMessage::getPayload), result ); }