为什么不总是调用OSGI事件处理程序

为什么不总是调用OSGI事件处理程序,osgi,aem,sling,Osgi,Aem,Sling,我有一个简单的OSGI事件监听器类 @Component(immediate = true) @Service(value = { EventHandler.class, JobConsumer.class }) @Properties(value = { @Property(name = JobConsumer.PROPERTY_TOPICS, value = { TestEventHandler.JOB_TOPICS }), @Property(name = EventConstants.

我有一个简单的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) 发生这种情况是因为Felix事件管理OSGI配置中的线程池大小设置为20还是其他原因


2) 是否需要增加线程大小、异步/同步线程池比率和超时,如果需要,如何确定数字

如果EventHandler花费的时间太长,它将被列入黑名单,然后将不再接收任何事件


可以配置甚至关闭超时。除此之外,使用执行器运行长时间运行的任务是一种很好的做法。

谢谢您的帮助,如果我理解正确,如果Eventhandler花费的时间超过指定的超时时间,那么它是否被视为黑名单?如果我关闭它,那么它在AEM系统中会有其他影响吗?您是否建议不要更改默认线程大小?还有一个问题,对于executor服务,executor的大小可能是多少。newFixedThreadPool(?);它应该与Felix事件管理中指定的内容相同?