Interface BrokerInterceptor

  • All Superinterfaces:
    java.lang.AutoCloseable
    All Known Implementing Classes:
    BrokerInterceptors, BrokerInterceptorWithClassLoader

    @LimitedPrivate
    @Evolving
    public interface BrokerInterceptor
    extends java.lang.AutoCloseable
    A plugin interface that allows you to intercept the client requests to the Pulsar brokers.

    BrokerInterceptor callbacks may be called from multiple threads. Interceptor implementation must ensure thread-safety, if needed.

    • Method Summary

      All Methods Instance Methods Abstract Methods Default Methods 
      Modifier and Type Method Description
      default void beforeSendMessage​(Subscription subscription, org.apache.bookkeeper.mledger.Entry entry, long[] ackSet, org.apache.pulsar.common.api.proto.MessageMetadata msgMetadata)
      Intercept messages before sending them to the consumers.
      void close()
      Close this broker interceptor.
      default void consumerCreated​(ServerCnx cnx, Consumer consumer, java.util.Map<java.lang.String,​java.lang.String> metadata)
      Intercept after a consumer is created.
      void initialize​(PulsarService pulsarService)
      Initialize the broker interceptor.
      default void messageAcked​(ServerCnx cnx, Consumer consumer, org.apache.pulsar.common.api.proto.CommandAck ackCmd)
      Intercept after a message ack is processed.
      default void messageDispatched​(ServerCnx cnx, Consumer consumer, long ledgerId, long entryId, io.netty.buffer.ByteBuf headersAndPayload)
      Intercept after a message is dispatched to consumer.
      default void messageProduced​(ServerCnx cnx, Producer producer, long startTimeNs, long ledgerId, long entryId, Topic.PublishContext publishContext)
      Intercept after a message is produced.
      void onConnectionClosed​(ServerCnx cnx)
      Called by the broker while connection closed.
      default void onConnectionCreated​(ServerCnx cnx)
      Called by the broker when a new connection is created.
      default void onFilter​(javax.servlet.ServletRequest request, javax.servlet.ServletResponse response, javax.servlet.FilterChain chain)
      The interception of web processing, as same as `Filter.onFilter`.
      void onPulsarCommand​(org.apache.pulsar.common.api.proto.BaseCommand command, ServerCnx cnx)
      Called by the broker while new command incoming.
      void onWebserviceRequest​(javax.servlet.ServletRequest request)
      Called by the web service while new request incoming.
      void onWebserviceResponse​(javax.servlet.ServletRequest request, javax.servlet.ServletResponse response)
      Intercept the webservice response before send to client.
      default void producerCreated​(ServerCnx cnx, Producer producer, java.util.Map<java.lang.String,​java.lang.String> metadata)
      Called by the broker when a new connection is created.
    • Method Detail

      • beforeSendMessage

        default void beforeSendMessage​(Subscription subscription,
                                       org.apache.bookkeeper.mledger.Entry entry,
                                       long[] ackSet,
                                       org.apache.pulsar.common.api.proto.MessageMetadata msgMetadata)
        Intercept messages before sending them to the consumers.
        Parameters:
        subscription - pulsar subscription
        entry - entry
        ackSet - entry ack bitset. it is either null or an array of long-based bitsets.
        msgMetadata - message metadata. The message metadata will be recycled after this call.
      • onConnectionCreated

        default void onConnectionCreated​(ServerCnx cnx)
        Called by the broker when a new connection is created.
      • producerCreated

        default void producerCreated​(ServerCnx cnx,
                                     Producer producer,
                                     java.util.Map<java.lang.String,​java.lang.String> metadata)
        Called by the broker when a new connection is created.
      • consumerCreated

        default void consumerCreated​(ServerCnx cnx,
                                     Consumer consumer,
                                     java.util.Map<java.lang.String,​java.lang.String> metadata)
        Intercept after a consumer is created.
        Parameters:
        cnx - client Connection
        consumer - Consumer object
        metadata - A map of metdata
      • messageProduced

        default void messageProduced​(ServerCnx cnx,
                                     Producer producer,
                                     long startTimeNs,
                                     long ledgerId,
                                     long entryId,
                                     Topic.PublishContext publishContext)
        Intercept after a message is produced.
        Parameters:
        cnx - client Connection
        producer - Producer object
        publishContext - Publish Context
      • messageDispatched

        default void messageDispatched​(ServerCnx cnx,
                                       Consumer consumer,
                                       long ledgerId,
                                       long entryId,
                                       io.netty.buffer.ByteBuf headersAndPayload)
        Intercept after a message is dispatched to consumer.
        Parameters:
        cnx - client Connection
        consumer - Consumer object
        ledgerId - Ledger ID
        entryId - Entry ID
        headersAndPayload - Data
      • messageAcked

        default void messageAcked​(ServerCnx cnx,
                                  Consumer consumer,
                                  org.apache.pulsar.common.api.proto.CommandAck ackCmd)
        Intercept after a message ack is processed.
        Parameters:
        cnx - client Connection
        ackCmd - Command object
      • onPulsarCommand

        void onPulsarCommand​(org.apache.pulsar.common.api.proto.BaseCommand command,
                             ServerCnx cnx)
                      throws org.apache.pulsar.common.intercept.InterceptException
        Called by the broker while new command incoming.
        Throws:
        org.apache.pulsar.common.intercept.InterceptException
      • onConnectionClosed

        void onConnectionClosed​(ServerCnx cnx)
        Called by the broker while connection closed.
      • onWebserviceRequest

        void onWebserviceRequest​(javax.servlet.ServletRequest request)
                          throws java.io.IOException,
                                 javax.servlet.ServletException,
                                 org.apache.pulsar.common.intercept.InterceptException
        Called by the web service while new request incoming.
        Throws:
        java.io.IOException
        javax.servlet.ServletException
        org.apache.pulsar.common.intercept.InterceptException
      • onWebserviceResponse

        void onWebserviceResponse​(javax.servlet.ServletRequest request,
                                  javax.servlet.ServletResponse response)
                           throws java.io.IOException,
                                  javax.servlet.ServletException
        Intercept the webservice response before send to client.
        Throws:
        java.io.IOException
        javax.servlet.ServletException
      • onFilter

        default void onFilter​(javax.servlet.ServletRequest request,
                              javax.servlet.ServletResponse response,
                              javax.servlet.FilterChain chain)
                       throws java.io.IOException,
                              javax.servlet.ServletException
        The interception of web processing, as same as `Filter.onFilter`. So In this method, we must call `chain.doFilter` to continue the chain.
        Throws:
        java.io.IOException
        javax.servlet.ServletException
      • initialize

        void initialize​(PulsarService pulsarService)
                 throws java.lang.Exception
        Initialize the broker interceptor.
        Throws:
        java.lang.Exception - when fail to initialize the broker interceptor.
      • close

        void close()
        Close this broker interceptor.
        Specified by:
        close in interface java.lang.AutoCloseable