2017-09-14 47 views
1

我正在开发OSGI项目。有很多服务使用事件管理,发送和处理事件。而事件管理员似乎在一个线程中处理事件。当一个handleEvent函数被激活时,任何其他的句柄事件函数都不会启动,直到运行handleEvent函数退出。我测试了Thread.sleep函数。如何使OSGI EventAdmin在多个线程中处理事件

我不知道是否有任何配置或参数让事件管理员以多线程的方式处理事件。

我使用的是eclipse neon 3和equinox自带的。

回答

0

这取决于您使用的事件管理impl。对于felix eventadmin,默认情况下使用20个线程并且可配置。

您还应该使用eventAdmin.postEvent来确保异步传递。

+0

我使用日食霓虹灯3和Equinox来用它。我用postEvent。 – fyo

0

该规范提供了使用线程数量的余地。但是,有一个保证可能是昂贵的。事件必须交给给定的处理程序。这限制了并行传送。您可以注册一个服务属性event.delivery=async.unordered,该服务属性将删除该处理程序的限制,并允许Event Admin在传递事件方面更有余地。

我发现它,而很难相信春分版本将只使用一个线程...

要了解更多有关事件管理,阅读教程OSGi Event Admin – Publish & Subscribe