Interface BrokerInterceptor

All Superinterfaces:
AutoCloseable
All Known Implementing Classes:
BrokerInterceptors, BrokerInterceptorWithClassLoader

@LimitedPrivate @Evolving public interface BrokerInterceptor extends 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

    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 this broker interceptor.
    default void
    consumerCreated(ServerCnx cnx, Consumer consumer, Map<String,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
    Called by the broker while connection closed.
    default void
    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, Map<String,String> metadata)
    Called by the broker when a new connection is created.
    default void
    txnEnded(String txnID, long txnAction)
    Intercept when a transaction ends.
    default void
    txnOpened(long tcId, String txnID)
    Intercept when a transaction begins.
  • Method Details

    • 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, Map<String,String> metadata)
      Called by the broker when a new connection is created.
    • consumerCreated

      default void consumerCreated(ServerCnx cnx, Consumer consumer, Map<String,String> metadata)
      Intercept after a consumer is created.
      Parameters:
      cnx - client Connection
      consumer - Consumer object
      metadata - A map of metadata
    • 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
    • txnOpened

      default void txnOpened(long tcId, String txnID)
      Intercept when a transaction begins.
      Parameters:
      tcId - Transaction Coordinator Id
      txnID - Transaction ID
    • txnEnded

      default void txnEnded(String txnID, long txnAction)
      Intercept when a transaction ends.
      Parameters:
      txnID - Transaction ID
      txnAction - Transaction Action
    • 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 IOException, javax.servlet.ServletException, org.apache.pulsar.common.intercept.InterceptException
      Called by the web service while new request incoming.
      Throws:
      IOException
      javax.servlet.ServletException
      org.apache.pulsar.common.intercept.InterceptException
    • onWebserviceResponse

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

      default void onFilter(javax.servlet.ServletRequest request, javax.servlet.ServletResponse response, javax.servlet.FilterChain chain) throws 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:
      IOException
      javax.servlet.ServletException
    • initialize

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

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