Class EventProcessor

java.lang.Object
ru.bitel.bgbilling.kernel.base.server.logger.BGLogger
ru.bitel.bgbilling.kernel.event.EventProcessor

public class EventProcessor extends ru.bitel.bgbilling.kernel.base.server.logger.BGLogger
Обработчик (и отсылщик) событий.
Текущая проверенная пропускная способность для запроса-ответа на 4ядерном -
около 1000 в секунду для xml сериализации, примерно в полтора раза больше для обычной сериализации.
Но xml предпочтительнее для интеграции с внешними системами. При простом оповещении о событии (topic) - еще в два раза больше.
  • 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, 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, Class<E> clazz, 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, Class<E> clazz, int moduleId, 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, Class<E> clazz, int moduleId, int pluginId, 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, Class<E> clazz, int moduleId, int pluginId, 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, 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, Class<E> clazz, 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, Class<E> clazz, int moduleId, 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> String getKey(Class<E> clazz, int moduleId, int pluginId, 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, Class<E> clazz, int moduleId, String query) throws ru.bitel.bgbilling.common.BGException
      Throws:
      ru.bitel.bgbilling.common.BGException
    • removeListener

      public void removeListener(EventListener<?> l, Collection<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> Future<Q> requestAsync(Q e, long timeout) throws EventProcessorException
      Выполнение запроса асинхронно.
      Если ответ не пришел, обязательно должен быть обязательно вызван Future.cancel(boolean)!!!
      Type Parameters:
      Q -
      Parameters:
      e -
      timeout -
      Returns:
      Throws:
      EventProcessorException
    • getListeningEvents

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

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

      public 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(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(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(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(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, InterruptedException
      Останов и ожидание окончания выполнения уже полученных событий.
      Throws:
      javax.jms.JMSException
      InterruptedException
    • doCrossComponentQuery

      public Map<String,Object> doCrossComponentQuery(String componentName, int componentId, String componentOperation, Object... params) throws Exception
      Parameters:
      componentName -
      componentId -
      componentOperation -
      params -
      Returns:
      Throws:
      ru.bitel.bgbilling.common.BGException
      Exception