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

标签 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.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) 我是否需要增加线程大小、异步/同步线程池比率和超时,如果是,我如何确定数字?

最佳答案

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

参见 http://felix.apache.org/documentation/subprojects/apache-felix-event-admin.html

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

关于osgi - 为什么不总是调用 OSGI 事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58787226/

相关文章:

jar - Sling 运行模式的优先顺序

java - 通过配置属性动态连接 OSGi 服务

java - Glassfish 作为 OSGi 容器

grails - Groovy + OSGi还是Grails?

adobe - 正在运行 Adob​​e CQ5 的哪个版本/服务包?

osgi - 将 Sling Scheduler 与 Eclipse Equinox 或 OSGI @Reference 规则结合使用

java - Eclipse Equinox,如何配置自动加载插件文件夹中的包

aem - CQ5 - 取消 Live Copy 组件的单个属性继承

shell - 无法在 Ubuntu 18.04 上将 AEM 作为服务启动

servlets - 在 CQ5 中访问 Sling Servlet