Class DefaultQueryGateway

java.lang.Object
org.axonframework.queryhandling.DefaultQueryGateway
All Implemented Interfaces:
MessageDispatchInterceptorSupport<QueryMessage<?,?>>, QueryGateway

public class DefaultQueryGateway extends Object implements QueryGateway
Implementation of the QueryGateway interface that allows the registration of dispatchInterceptors.
Since:
3.1
Author:
Marc Gathier, Allard Buijze, Steven van Beelen
  • Constructor Details

  • Method Details

    • builder

      public static DefaultQueryGateway.Builder builder()
      Instantiate a Builder to be able to create a DefaultQueryGateway.

      The dispatchInterceptors is defaulted to an empty list. The QueryBus is a hard requirement and as such should be provided.

      Returns:
      a Builder to be able to create a DefaultQueryGateway
    • query

      public <R, Q> CompletableFuture<R> query(@Nonnull String queryName, @Nonnull Q query, @Nonnull ResponseType<R> responseType)
      Description copied from interface: QueryGateway
      Sends given query over the QueryBus, expecting a response in the form of responseType from a single source. Execution may be asynchronous, depending on the QueryBus implementation.
      Specified by:
      query in interface QueryGateway
      Type Parameters:
      R - The response class contained in the given responseType
      Q - The query class
      Parameters:
      queryName - A String describing the query to be executed
      query - The query to be sent
      responseType - The ResponseType used for this query
      Returns:
      A CompletableFuture containing the query result as dictated by the given responseType
    • streamingQuery

      public <R, Q> org.reactivestreams.Publisher<R> streamingQuery(String queryName, Q query, Class<R> responseType)
      Description copied from interface: QueryGateway
      Sends given query over the QueryBus, expecting a response as Publisher of responseType. Query is sent once Publisher is subscribed to. The Streaming query allows a client to stream large result sets. Usage of this method requires Project Reactor on the class path. Publisher is used for backwards compatibility reason, for clients that don't have Project Reactor on class path. Check Reactor Extension for native Flux type and more. Use Flux.from(publisher) to convert to Flux stream.
      Specified by:
      streamingQuery in interface QueryGateway
      Type Parameters:
      R - The response class contained in the given responseType
      Q - The query class
      Parameters:
      queryName - A String describing the query to be executed
      query - The query to be sent
      responseType - A Class describing the desired response type
      Returns:
      A Publisher streaming the results as dictated by the given responseType.
    • scatterGather

      public <R, Q> Stream<R> scatterGather(@Nonnull String queryName, @Nonnull Q query, @Nonnull ResponseType<R> responseType, long timeout, @Nonnull TimeUnit timeUnit)
      Description copied from interface: QueryGateway
      Sends given query over the QueryBus, expecting a response in the form of responseType from several sources. The stream is completed when a timeout occurs or when all results are received. Execution may be asynchronous, depending on the QueryBus implementation.
      Specified by:
      scatterGather in interface QueryGateway
      Type Parameters:
      R - The response class contained in the given responseType
      Q - The query class
      Parameters:
      queryName - A String describing the query to be executed
      query - The query to be sent
      responseType - The ResponseType used for this query
      timeout - A timeout of long for the query
      timeUnit - The selected TimeUnit for the given timeout
      Returns:
      A stream of results.
    • subscriptionQuery

      @Deprecated public <Q, I, U> SubscriptionQueryResult<I,U> subscriptionQuery(@Nonnull String queryName, @Nonnull Q query, @Nonnull ResponseType<I> initialResponseType, @Nonnull ResponseType<U> updateResponseType, @Nullable SubscriptionQueryBackpressure backpressure, int updateBufferSize)
      Description copied from interface: QueryGateway
      Sends given query over the QueryBus and returns result containing initial response and incremental updates (received at the moment the query is sent, until it is cancelled by the caller or closed by the emitting side).

      Note: Any null results, on the initial result or the updates, wil lbe filtered out by the QueryGateway. If you require the null to be returned for the initial and update results, we suggest using the QueryBus instead.

      Specified by:
      subscriptionQuery in interface QueryGateway
      Type Parameters:
      Q - The type of the query
      I - The type of the initial response
      U - The type of the incremental update
      Parameters:
      queryName - A String describing query to be executed
      query - The query to be sent
      initialResponseType - The initial response type used for this query
      updateResponseType - The update response type used for this query
      backpressure - The backpressure mechanism to deal with producing of incremental updates
      updateBufferSize - The size of buffer which accumulates updates before subscription to the flux is made
      Returns:
      registration which can be used to cancel receiving updates
      See Also:
    • subscriptionQuery

      public <Q, I, U> SubscriptionQueryResult<I,U> subscriptionQuery(@Nonnull String queryName, @Nonnull Q query, @Nonnull ResponseType<I> initialResponseType, @Nonnull ResponseType<U> updateResponseType, int updateBufferSize)
      Description copied from interface: QueryGateway
      Sends given query over the QueryBus and returns result containing initial response and incremental updates (received at the moment the query is sent, until it is cancelled by the caller or closed by the emitting side).

      Note: Any null results, on the initial result or the updates, wil lbe filtered out by the QueryGateway. If you require the null to be returned for the initial and update results, we suggest using the QueryBus instead.

      Specified by:
      subscriptionQuery in interface QueryGateway
      Type Parameters:
      Q - the type of the query
      I - the type of the initial response
      U - the type of the incremental update
      Parameters:
      queryName - a String describing query to be executed
      query - the query to be sent
      initialResponseType - the initial response type used for this query
      updateResponseType - the update response type used for this query
      updateBufferSize - the size of buffer which accumulates updates before subscription to the flux is made
      Returns:
      registration which can be used to cancel receiving updates
      See Also:
    • registerDispatchInterceptor

      public Registration registerDispatchInterceptor(@Nonnull MessageDispatchInterceptor<? super QueryMessage<?,?>> interceptor)
      Description copied from interface: MessageDispatchInterceptorSupport
      Register the given DispatchInterceptor. After registration, the interceptor will be invoked for each Message dispatched on the messaging component that it was registered to.
      Specified by:
      registerDispatchInterceptor in interface MessageDispatchInterceptorSupport<QueryMessage<?,?>>
      Parameters:
      interceptor - The interceptor to register
      Returns:
      A Registration, which may be used to deregister the interceptor.