2017-09-14 48 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