Class EventProcessor

java.lang.Object
ru.bitel.bgbilling.kernel.event.EventProcessor

public class EventProcessor
extends java.lang.Object
Обработчик (и отсылщик) событий.
Текущая проверенная пропускная способность для запроса-ответа на 4ядерном -
около 1000 в секунду для xml сериализации, примерно в полтора раза больше для обычной сериализации.
Но xml предпочтительнее для интеграции с внешними системами. При простом оповещении о событии (topic) - еще в два раза больше.
  • Field Summary

    Fields
    Modifier and Type Field Description
    boolean syncAcknowledgeFix  
  • Method Summary

    Modifier and Type Method Description
    <E extends ru.bitel.bgbilling.kernel.event.common.Event>
    void
    addListener​(EventListener<? super E> l, java.lang.Class<E> clazz)  
    <E extends ru.bitel.bgbilling.kernel.event.common.Event>
    void
    addListener​(EventListener<? super E> l, java.lang.Class<E> clazz, int moduleId, int pluginId, java.lang.String query)
    Добавление слушателя события с параметрами фильтра.
    <E extends ru.bitel.bgbilling.kernel.event.common.Event>
    void
    addListener​(EventListener<? super E> l, java.lang.Class<E> clazz, int moduleId, java.lang.String query)  
    <E extends ru.bitel.bgbilling.kernel.event.common.Event>
    void
    addListener​(EventListener<? super E> l, java.lang.Class<E> clazz, java.lang.String query)  
    static EventProcessor getInstance()
    Получение instance процессора.
    static <E extends ru.bitel.bgbilling.kernel.event.common.Event>
    java.lang.String
    getKey​(java.lang.Class<E> clazz, int moduleId, int pluginId, java.lang.String query)  
    java.util.List<EventKey> getListeningEventKeys()
    Возвращает список событий, которые слушаются.
    java.util.List<java.lang.Class<? extends ru.bitel.bgbilling.kernel.event.common.Event>> getListeningEvents()
    Возвращает список событий, которые слушаются.
    java.util.List<java.lang.Class<? extends ru.bitel.bgbilling.kernel.event.common.Event>> getListeningQueueEvents()  
    protected static EventProcessor newInstance​(javax.jms.ConnectionFactory connectionFactory)
    Создание экземпляра и ожидание EventProcessor Этот метод на будущее...
    <E extends ru.bitel.bgbilling.kernel.event.common.PoolEvent>
    PoolEventPublisher<E>
    newPoolEventPublisher​(java.lang.Class<E> clazz, int moduleId)
    Создание отправщика PoolEvent.
    <E extends ru.bitel.bgbilling.kernel.event.common.PoolEvent>
    PoolEventPublisher<E>
    newPoolEventPublisher​(java.lang.Class<E> clazz, int moduleId, int capacity, long delay)
    Создание отправщика PoolEvent.
    <E extends ru.bitel.bgbilling.kernel.event.common.PoolQueueEvent>
    PoolEventPublisher<E>
    newPoolQueueEventPublisher​(java.lang.Class<E> clazz, int moduleId)
    Создание отправщика PoolEvent.
    <E extends ru.bitel.bgbilling.kernel.event.common.PoolQueueEvent>
    PoolEventPublisher<E>
    newPoolQueueEventPublisher​(java.lang.Class<E> clazz, int moduleId, int capacity, long delay)
    Создание отправщика PoolEvent.
    void publish​(ru.bitel.bgbilling.kernel.event.common.Event event)  
    void publishAfterCommit​(ru.bitel.bgbilling.kernel.event.common.Event e)  
    void publishAfterCommit​(ru.bitel.common.worker.CommitableHandler context, ru.bitel.bgbilling.kernel.event.common.Event e)  
    void removeListener​(EventListener<?> l)  
    <E extends ru.bitel.bgbilling.kernel.event.common.Event>
    void
    removeListener​(EventListener<?> l, java.lang.Class<E> clazz, int moduleId, java.lang.String query)  
    void removeListener​(EventListener<?> l, java.util.Collection<java.lang.String> exceptKeys)  
    <Q extends ru.bitel.bgbilling.kernel.event.common.QueueEvent>
    Q
    request​(Q e)
    Отправка события и ожидание ответа на него.
    <Q extends ru.bitel.bgbilling.kernel.event.common.Event>
    Q
    request​(Q e, long timeout)
    Отправка события и ожидание ответа на него.
    <Q extends ru.bitel.bgbilling.kernel.event.common.Event>
    java.util.concurrent.Future<Q>
    requestAsync​(Q e, long timeout)
    Выполнение запроса асинхронно.
    Если ответ не пришел, обязательно должен быть обязательно вызван Future.cancel(boolean)!!!
    void setThreadCount​(int count, int queue)
    Установка количества потоков обработки сообщений.
    Session работает в одном потоке.
    void shutdown()
    Останов и ожидание окончания выполнения уже полученных событий.
    <E extends ru.bitel.bgbilling.kernel.event.common.Event>
    boolean
    updateListener​(EventListener<? super E> l, java.lang.Class<E> clazz)  
    <E extends ru.bitel.bgbilling.kernel.event.common.Event>
    boolean
    updateListener​(EventListener<? super E> l, java.lang.Class<E> clazz, int moduleId, int pluginId, java.lang.String query)  
    <E extends ru.bitel.bgbilling.kernel.event.common.Event>
    boolean
    updateListener​(EventListener<? super E> l, java.lang.Class<E> clazz, int moduleId, java.lang.String query)  
    <E extends ru.bitel.bgbilling.kernel.event.common.Event>
    boolean
    updateListener​(EventListener<? super E> l, java.lang.Class<E> clazz, java.lang.String query)  

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • syncAcknowledgeFix

      public final boolean syncAcknowledgeFix
  • Method Details

    • setThreadCount

      public final void setThreadCount​(int count, int queue)
      Установка количества потоков обработки сообщений.
      Session работает в одном потоке. А этого параметра будет зависеть в пуле из скольки потоков
      будет обрабатываться сообщение. Если count <=0 сообщение обрабатывается в том же потоке.
      Parameters:
      count -
    • addListener

      public <E extends ru.bitel.bgbilling.kernel.event.common.Event> void addListener​(EventListener<? super E> l, java.lang.Class<E> clazz) throws ru.bitel.bgbilling.common.BGException
      Throws:
      ru.bitel.bgbilling.common.BGException
    • addListener

      public <E extends ru.bitel.bgbilling.kernel.event.common.Event> void addListener​(EventListener<? super E> l, java.lang.Class<E> clazz, java.lang.String query) throws ru.bitel.bgbilling.common.BGException
      Throws:
      ru.bitel.bgbilling.common.BGException
    • addListener

      public <E extends ru.bitel.bgbilling.kernel.event.common.Event> void addListener​(EventListener<? super E> l, java.lang.Class<E> clazz, int moduleId, java.lang.String query) throws ru.bitel.bgbilling.common.BGException
      Throws:
      ru.bitel.bgbilling.common.BGException
    • addListener

      public <E extends ru.bitel.bgbilling.kernel.event.common.Event> void addListener​(EventListener<? super E> l, java.lang.Class<E> clazz, int moduleId, int pluginId, java.lang.String query) throws ru.bitel.bgbilling.common.BGException
      Добавление слушателя события с параметрами фильтра.
      Type Parameters:
      E -
      Parameters:
      l -
      clazz -
      moduleId - фильтр по коду модуля (-1 - не важно, 0 - ядро)
      pluginId - фильтр по коду плагина (-1 - не важно)
      query - фильтр по параметрам сообщения события.
      Параметры сообщения устанавливаются событием в Event.prepareMessage(ObjectMessage)
      Throws:
      ru.bitel.bgbilling.common.BGException
      See Also:
      Message
    • updateListener

      public <E extends ru.bitel.bgbilling.kernel.event.common.Event> boolean updateListener​(EventListener<? super E> l, java.lang.Class<E> clazz, int moduleId, int pluginId, java.lang.String query) throws ru.bitel.bgbilling.common.BGException
      Throws:
      ru.bitel.bgbilling.common.BGException
    • updateListener

      public <E extends ru.bitel.bgbilling.kernel.event.common.Event> boolean updateListener​(EventListener<? super E> l, java.lang.Class<E> clazz) throws ru.bitel.bgbilling.common.BGException
      Throws:
      ru.bitel.bgbilling.common.BGException
    • updateListener

      public <E extends ru.bitel.bgbilling.kernel.event.common.Event> boolean updateListener​(EventListener<? super E> l, java.lang.Class<E> clazz, java.lang.String query) throws ru.bitel.bgbilling.common.BGException
      Throws:
      ru.bitel.bgbilling.common.BGException
    • updateListener

      public <E extends ru.bitel.bgbilling.kernel.event.common.Event> boolean updateListener​(EventListener<? super E> l, java.lang.Class<E> clazz, int moduleId, java.lang.String query) throws ru.bitel.bgbilling.common.BGException
      Throws:
      ru.bitel.bgbilling.common.BGException
    • getKey

      public static <E extends ru.bitel.bgbilling.kernel.event.common.Event> java.lang.String getKey​(java.lang.Class<E> clazz, int moduleId, int pluginId, java.lang.String query)
    • removeListener

      public void removeListener​(EventListener<?> l) throws ru.bitel.bgbilling.common.BGException
      Throws:
      ru.bitel.bgbilling.common.BGException
    • removeListener

      public <E extends ru.bitel.bgbilling.kernel.event.common.Event> void removeListener​(EventListener<?> l, java.lang.Class<E> clazz, int moduleId, java.lang.String query) throws ru.bitel.bgbilling.common.BGException
      Throws:
      ru.bitel.bgbilling.common.BGException
    • removeListener

      public void removeListener​(EventListener<?> l, java.util.Collection<java.lang.String> exceptKeys) throws ru.bitel.bgbilling.common.BGException
      Throws:
      ru.bitel.bgbilling.common.BGException
    • publishAfterCommit

      public final void publishAfterCommit​(ru.bitel.common.worker.CommitableHandler context, ru.bitel.bgbilling.kernel.event.common.Event e)
    • publishAfterCommit

      public final void publishAfterCommit​(ru.bitel.bgbilling.kernel.event.common.Event e)
    • publish

      public final void publish​(ru.bitel.bgbilling.kernel.event.common.Event event) throws ru.bitel.bgbilling.common.BGException
      Throws:
      ru.bitel.bgbilling.common.BGException
    • request

      public final <Q extends ru.bitel.bgbilling.kernel.event.common.QueueEvent> Q request​(Q e) throws ru.bitel.bgbilling.common.BGException
      Отправка события и ожидание ответа на него. Ответ - это (возможно) измененный объект e Но в тоже время он мог быть передан по сети туда и обратно, потому result != e
      Throws:
      ru.bitel.bgbilling.common.BGException
    • request

      public final <Q extends ru.bitel.bgbilling.kernel.event.common.Event> Q request​(Q e, long timeout) throws EventProcessorException
      Отправка события и ожидание ответа на него. Ответ - это (возможно) измененный объект e Но в тоже время он был передан по сети туда и обратно, потому result != e
      Если задан таймаут, то необходимо на повторное событие с теми же параметрами - отвечать одинаково,
      так как событие на самом деле может все равно обработаться, но таймаут выйти и ответ не придет.
      Throws:
      EventProcessorException
    • requestAsync

      public <Q extends ru.bitel.bgbilling.kernel.event.common.Event> java.util.concurrent.Future<Q> requestAsync​(Q e, long timeout) throws EventProcessorException
      Выполнение запроса асинхронно.
      Если ответ не пришел, обязательно должен быть обязательно вызван Future.cancel(boolean)!!!
      Type Parameters:
      Q -
      Parameters:
      e -
      timeout -
      Returns:
      Throws:
      EventProcessorException
    • newInstance

      protected static EventProcessor newInstance​(javax.jms.ConnectionFactory connectionFactory)
      Создание экземпляра и ожидание EventProcessor Этот метод на будущее...
      Parameters:
      connectionFactory -
      Returns:
    • getListeningEvents

      public java.util.List<java.lang.Class<? extends ru.bitel.bgbilling.kernel.event.common.Event>> getListeningEvents()
      Возвращает список событий, которые слушаются.
      Returns:
    • getListeningQueueEvents

      public java.util.List<java.lang.Class<? extends ru.bitel.bgbilling.kernel.event.common.Event>> getListeningQueueEvents()
    • getListeningEventKeys

      public java.util.List<EventKey> getListeningEventKeys()
      Возвращает список событий, которые слушаются.
      Returns:
    • getInstance

      public static final EventProcessor getInstance()
      Получение instance процессора. Процессор инициализируется при первом использовании.
      Returns:
    • newPoolEventPublisher

      public <E extends ru.bitel.bgbilling.kernel.event.common.PoolEvent> PoolEventPublisher<E> newPoolEventPublisher​(java.lang.Class<E> clazz, int moduleId)
      Создание отправщика PoolEvent.
      Type Parameters:
      E -
      Parameters:
      clazz -
      moduleId - код модуля, с которым будут все отправленные события.
      Returns:
      See Also:
      PoolEvent
    • newPoolEventPublisher

      public <E extends ru.bitel.bgbilling.kernel.event.common.PoolEvent> PoolEventPublisher<E> newPoolEventPublisher​(java.lang.Class<E> clazz, int moduleId, int capacity, long delay)
      Создание отправщика PoolEvent.
      Type Parameters:
      E -
      Parameters:
      clazz -
      moduleId - код модуля, с которым будут все отправленные события
      capacity - максимальный размер буфера сообщений
      delay - частота отправки буфера, в миллисекундах
      Returns:
    • newPoolQueueEventPublisher

      public <E extends ru.bitel.bgbilling.kernel.event.common.PoolQueueEvent> PoolEventPublisher<E> newPoolQueueEventPublisher​(java.lang.Class<E> clazz, int moduleId)
      Создание отправщика PoolEvent.
      Type Parameters:
      E -
      Parameters:
      clazz -
      moduleId - код модуля, с которым будут все отправленные события.
      Returns:
      See Also:
      PoolEvent
    • newPoolQueueEventPublisher

      public <E extends ru.bitel.bgbilling.kernel.event.common.PoolQueueEvent> PoolEventPublisher<E> newPoolQueueEventPublisher​(java.lang.Class<E> clazz, int moduleId, int capacity, long delay)
      Создание отправщика PoolEvent.
      Type Parameters:
      E -
      Parameters:
      clazz -
      moduleId - код модуля, с которым будут все отправленные события
      capacity - максимальный размер буфера сообщений
      delay - частота отправки буфера, в миллисекундах
      Returns:
    • shutdown

      public void shutdown() throws javax.jms.JMSException, java.lang.InterruptedException
      Останов и ожидание окончания выполнения уже полученных событий.
      Throws:
      javax.jms.JMSException
      java.lang.InterruptedException