public SubscriptionQuery serialize(SubscriptionQueryMessage message) { QueryRequest queryRequest = QueryRequest.newBuilder().setTimestamp(System.currentTimeMillis()) .setMessageIdentifier(message.getIdentifier()) .setQuery(message.getQueryName()) .setClientId(conf.getClientId()) .setComponentName(conf.getComponentName()) .setPayload(payloadSerializer.apply(message)) .setResponseType(responseTypeSerializer.apply(message.getResponseType())) .putAllMetaData(metadataSerializer.apply(message.getMetaData())).build(); SubscriptionQuery.Builder builder = SubscriptionQuery.newBuilder() .setSubscriptionIdentifier(message.getIdentifier()) .setNumberOfPermits(conf.getInitialNrOfPermits()) .setUpdateResponseType(responseTypeSerializer.apply(message.getUpdateResponseType())) .setQueryRequest(queryRequest); return builder.build(); }
/** * Completes with an error subscription queries matching given query type and filter * * @param queryType the type of the query * @param filter predicate on query payload used to filter subscription queries * @param cause the cause of an error * @param <Q> the type of the query */ @SuppressWarnings("unchecked") default <Q> void completeExceptionally(Class<Q> queryType, Predicate<? super Q> filter, Throwable cause) { Predicate<SubscriptionQueryMessage<?, ?, ?>> sqmFilter = m -> queryType.isAssignableFrom(m.getPayloadType()) && filter.test((Q) m.getPayload()); completeExceptionally(sqmFilter, cause); }
@Override public boolean queryUpdateHandlerRegistered(SubscriptionQueryMessage<?, ?, ?> query) { return updateHandlers.keySet() .stream() .anyMatch(m -> m.getIdentifier().equals(query.getIdentifier())); }
@SuppressWarnings("unchecked") private <U> void doEmit(SubscriptionQueryMessage<?, ?, ?> query, FluxSinkWrapper<?> updateHandler, SubscriptionQueryUpdateMessage<U> update) { MessageMonitor.MonitorCallback monitorCallback = updateMessageMonitor.onMessageIngested(update); try { ((FluxSinkWrapper<SubscriptionQueryUpdateMessage<U>>) updateHandler).next(update); monitorCallback.reportSuccess(); } catch (Exception e) { logger.info("An error occurred while trying to emit an update to a query '{}'. " + "The subscription will be cancelled. Exception summary: {}", query.getQueryName(), e.toString(), logger.isDebugEnabled() ? e : ""); monitorCallback.reportFailure(e); updateHandlers.remove(query); emitError(query, e, updateHandler); } }
@Override public <Q, I, U> SubscriptionQueryResult<QueryResponseMessage<I>, SubscriptionQueryUpdateMessage<U>> subscriptionQuery( SubscriptionQueryMessage<Q, I, U> query, SubscriptionQueryBackpressure backPressure, int updateBufferSize) { String subscriptionId = query.getIdentifier(); if (this.subscriptions.contains(subscriptionId)) { String errorMessage = "Already exists a subscription query with the same subscriptionId: " + subscriptionId; logger.warn(errorMessage); throw new IllegalArgumentException(errorMessage); } logger.debug("Subscription Query requested with subscriptionId {}", subscriptionId); subscriptions.add(subscriptionId); QueryServiceGrpc.QueryServiceStub queryService = this.queryServiceStub(); AxonServerSubscriptionQueryResult result = new AxonServerSubscriptionQueryResult( subscriptionSerializer.serialize(query), queryService::subscription, configuration, backPressure, updateBufferSize, () -> subscriptions.remove(subscriptionId)); return new DeserializedResult<>(result.get(), subscriptionSerializer); }
@SuppressWarnings("unchecked") private <U> void doEmit(SubscriptionQueryMessage<?, ?, ?> query, FluxSinkWrapper<?> updateHandler, SubscriptionQueryUpdateMessage<U> update) { MessageMonitor.MonitorCallback monitorCallback = updateMessageMonitor.onMessageIngested(update); try { ((FluxSinkWrapper<SubscriptionQueryUpdateMessage<U>>) updateHandler).next(update); monitorCallback.reportSuccess(); } catch (Exception e) { logger.info("An error occurred while trying to emit an update to a query '{}'. " + "The subscription will be cancelled. Exception summary: {}", query.getQueryName(), e.toString(), logger.isDebugEnabled() ? e : ""); monitorCallback.reportFailure(e); updateHandlers.remove(query); emitError(query, e, updateHandler); } }
public SubscriptionQuery serialize(SubscriptionQueryMessage message) { QueryRequest queryRequest = QueryRequest.newBuilder().setTimestamp(System.currentTimeMillis()) .setMessageIdentifier(message.getIdentifier()) .setQuery(message.getQueryName()) .setClientId(conf.getClientId()) .setComponentName(conf.getComponentName()) .setPayload(payloadSerializer.apply(message)) .setResponseType(responseTypeSerializer.apply(message.getResponseType())) .putAllMetaData(metadataSerializer.apply(message.getMetaData())).build(); SubscriptionQuery.Builder builder = SubscriptionQuery.newBuilder() .setSubscriptionIdentifier(message.getIdentifier()) .setNumberOfPermits(conf.getInitialNrOfPermits()) .setUpdateResponseType(responseTypeSerializer.apply(message.getUpdateResponseType())) .setQueryRequest(queryRequest); return builder.build(); }
/** * Completes subscription queries matching given query type and filter. * * @param queryType the type of the query * @param filter predicate on query payload used to filter subscription queries * @param <Q> the type of the query */ @SuppressWarnings("unchecked") default <Q> void complete(Class<Q> queryType, Predicate<? super Q> filter) { Predicate<SubscriptionQueryMessage<?, ?, ?>> sqmFilter = m -> queryType.isAssignableFrom(m.getPayloadType()) && filter.test((Q) m.getPayload()); complete(sqmFilter); }
@Override public boolean queryUpdateHandlerRegistered(SubscriptionQueryMessage<?, ?, ?> query) { return updateHandlers.keySet() .stream() .anyMatch(m -> m.getIdentifier().equals(query.getIdentifier())); }
@SuppressWarnings("unchecked") private <U> void doEmit(SubscriptionQueryMessage<?, ?, ?> query, FluxSinkWrapper<?> updateHandler, SubscriptionQueryUpdateMessage<U> update) { MessageMonitor.MonitorCallback monitorCallback = updateMessageMonitor.onMessageIngested(update); try { ((FluxSinkWrapper<SubscriptionQueryUpdateMessage<U>>) updateHandler).next(update); monitorCallback.reportSuccess(); } catch (Exception e) { logger.info("An error occurred while trying to emit an update to a query '{}'. " + "The subscription will be cancelled. Exception summary: {}", query.getQueryName(), e.toString(), logger.isDebugEnabled() ? e : ""); monitorCallback.reportFailure(e); updateHandlers.remove(query); emitError(query, e, updateHandler); } }
/** * Emits given incremental update to subscription queries matching given query type and filter. * * @param queryType the type of the query * @param filter predicate on query payload used to filter subscription queries * @param update incremental update message * @param <Q> the type of the query * @param <U> the type of the update */ @SuppressWarnings("unchecked") default <Q, U> void emit(Class<Q> queryType, Predicate<? super Q> filter, SubscriptionQueryUpdateMessage<U> update) { Predicate<SubscriptionQueryMessage<?, ?, U>> sqmFilter = m -> queryType.isAssignableFrom(m.getPayloadType()) && filter.test((Q) m.getPayload()); emit(sqmFilter, update); }
@Override public <Q, I, U> SubscriptionQueryResult<QueryResponseMessage<I>, SubscriptionQueryUpdateMessage<U>> subscriptionQuery( SubscriptionQueryMessage<Q, I, U> query, SubscriptionQueryBackpressure backPressure, int updateBufferSize) { String subscriptionId = query.getIdentifier(); if (this.subscriptions.contains(subscriptionId)) { String errorMessage = "Already exists a subscription query with the same subscriptionId: " + subscriptionId; logger.warn(errorMessage); throw new IllegalArgumentException(errorMessage); } logger.debug("Subscription Query requested with subscriptionId {}", subscriptionId); subscriptions.add(subscriptionId); QueryServiceGrpc.QueryServiceStub queryService = this.queryServiceStub(); AxonServerSubscriptionQueryResult result = new AxonServerSubscriptionQueryResult( subscriptionSerializer.serialize(query), queryService::subscription, configuration, backPressure, updateBufferSize, () -> subscriptions.remove(subscriptionId)); return new DeserializedResult<>(result.get(), subscriptionSerializer); }
/** * Completes subscription queries matching given query type and filter. * * @param queryType the type of the query * @param filter predicate on query payload used to filter subscription queries * @param <Q> the type of the query */ @SuppressWarnings("unchecked") default <Q> void complete(Class<Q> queryType, Predicate<? super Q> filter) { Predicate<SubscriptionQueryMessage<?, ?, ?>> sqmFilter = m -> queryType.isAssignableFrom(m.getPayloadType()) && filter.test((Q) m.getPayload()); complete(sqmFilter); }
boolean alreadyExists = updateHandlers.keySet() .stream() .anyMatch(m -> m.getIdentifier().equals(query.getIdentifier())); if (alreadyExists) { throw new IllegalArgumentException("There is already a subscription with the given message identifier");
/** * Completes subscription queries matching given query type and filter. * * @param queryType the type of the query * @param filter predicate on query payload used to filter subscription queries * @param <Q> the type of the query */ @SuppressWarnings("unchecked") default <Q> void complete(Class<Q> queryType, Predicate<? super Q> filter) { Predicate<SubscriptionQueryMessage<?, ?, ?>> sqmFilter = m -> queryType.isAssignableFrom(m.getPayloadType()) && filter.test((Q) m.getPayload()); complete(sqmFilter); }
/** * Completes with an error subscription queries matching given query type and filter * * @param queryType the type of the query * @param filter predicate on query payload used to filter subscription queries * @param cause the cause of an error * @param <Q> the type of the query */ @SuppressWarnings("unchecked") default <Q> void completeExceptionally(Class<Q> queryType, Predicate<? super Q> filter, Throwable cause) { Predicate<SubscriptionQueryMessage<?, ?, ?>> sqmFilter = m -> queryType.isAssignableFrom(m.getPayloadType()) && filter.test((Q) m.getPayload()); completeExceptionally(sqmFilter, cause); }
/** * Emits given incremental update to subscription queries matching given query type and filter. * * @param queryType the type of the query * @param filter predicate on query payload used to filter subscription queries * @param update incremental update message * @param <Q> the type of the query * @param <U> the type of the update */ @SuppressWarnings("unchecked") default <Q, U> void emit(Class<Q> queryType, Predicate<? super Q> filter, SubscriptionQueryUpdateMessage<U> update) { Predicate<SubscriptionQueryMessage<?, ?, U>> sqmFilter = m -> queryType.isAssignableFrom(m.getPayloadType()) && filter.test((Q) m.getPayload()); emit(sqmFilter, update); }
/** * Completes with an error subscription queries matching given query type and filter * * @param queryType the type of the query * @param filter predicate on query payload used to filter subscription queries * @param cause the cause of an error * @param <Q> the type of the query */ @SuppressWarnings("unchecked") default <Q> void completeExceptionally(Class<Q> queryType, Predicate<? super Q> filter, Throwable cause) { Predicate<SubscriptionQueryMessage<?, ?, ?>> sqmFilter = m -> queryType.isAssignableFrom(m.getPayloadType()) && filter.test((Q) m.getPayload()); completeExceptionally(sqmFilter, cause); } }
/** * Emits given incremental update to subscription queries matching given query type and filter. * * @param queryType the type of the query * @param filter predicate on query payload used to filter subscription queries * @param update incremental update message * @param <Q> the type of the query * @param <U> the type of the update */ @SuppressWarnings("unchecked") default <Q, U> void emit(Class<Q> queryType, Predicate<? super Q> filter, SubscriptionQueryUpdateMessage<U> update) { Predicate<SubscriptionQueryMessage<?, ?, U>> sqmFilter = m -> queryType.isAssignableFrom(m.getPayloadType()) && filter.test((Q) m.getPayload()); emit(sqmFilter, update); }