Почему не всегда вызывается обработчик событий OSGI - PullRequest
2 голосов
/ 10 ноября 2019

У меня есть простой класс прослушивателя событий OSGI

   @Component(immediate = true)
   @Service(value = { EventHandler.class, JobConsumer.class })
    @Properties(value = {
    @Property(name = JobConsumer.PROPERTY_TOPICS, value = { 
   TestEventHandler.JOB_TOPICS }),
    @Property(name = EventConstants.EVENT_TOPIC, value = { PageEvent.EVENT_TOPIC }) })
 public class TestEventHandler implements EventHandler, JobConsumer {

    @Override
     public void handleEvent(final org.osgi.service.event.Event event) 
     {
      // Create job based on some complex condition
       jobManager.createJob(JOB_TOPICS).properties(properties).add();
          }

   @Override
     public JobResult process(Job job) {
       // Process job based on parameter in handleEvent function
        }
    }

Событие handleEvent вызывается иногда, но не всегда. Он внезапно перестал слушать события, и если я снова перезапущу сервис в консоли Felix, он снова начнет работать. Существуют другие пользовательские прослушиватели событий OSGI, у которых нет такой проблемы, только у этого прослушивателя есть проблема.

Скажите, пожалуйста, 1) Это происходит из-за размера пула потоков, равного 20, в конфигурации OSGI Felix Event Adminили что-то другое? 2) Нужно ли мне увеличивать размер потока, соотношение асинхронного / синхронизированного пула потоков и время ожидания, если да, как я могу определить числа?

1 Ответ

2 голосов
/ 10 ноября 2019

Если EventHandler занимает слишком много времени, он становится черным в списке и затем не получает больше событий.

См. http://felix.apache.org/documentation/subprojects/apache-felix-event-admin.html

Время ожидания можно настроить и даже отключить. Кроме того, хорошей практикой является использование исполнителя для запуска долго выполняющихся задач.

...