我有简单的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 Event Admin OSGI配置中将线程池大小设置为20而发生这种情况?
2)我是否需要增加线程大小,异步/同步线程池比率和超时,如果可以,如何确定数字?
答案 0 :(得分:3)
如果EventHandler花费的时间太长,它将变成黑名单,然后将不再接收任何事件。
请参见http://felix.apache.org/documentation/subprojects/apache-felix-event-admin.html
可以配置超时,甚至可以关闭超时。除此之外,使用执行程序来运行长时间运行的任务也是一个好习惯。