事件驱动世界中的OSGi框架
1. 事件管理服务的问题
在事件驱动的应用开发中,事件管理服务(Event Admin service)存在一些问题。
- 远程客户端问题 :在旅行社场景中,部分订阅者可能位于远程的OSGi框架实例中。然而,事件管理服务并未明确提及对远程事件处理程序的支持。这是有意为之,因为服务的远程调用由远程服务规范单独处理,不在该服务的范畴内。
- 确定性问题 :事件管理服务缺乏确定性。当从不同线程发送事件时,无法确定哪个订阅者会首先收到通知,也不清楚事件的调度顺序。在需要可重复和确定性行为的场景中,这会成为一个问题。例如,在登录事件场景中,可能希望安全审计器总是在日志审计器之前运行,但事件管理服务无法保证这一点。
不过,尽管存在这些缺点,事件管理服务仍能提供足够的功能来支持大多数常见的事件驱动场景。而且,基于其底层的OSGi基础,在需要时可以灵活扩展其功能。
2. 使用事件进行解耦
在开发中,解耦是一个重要的目标。通过服务接口进行交互的两个捆绑包(bundles)可以实现实现层面的解耦,但它们仍然与服务接口耦合。如果服务接口发生变化,捆绑包也会受到影响。
而当两个捆绑包通过交换事件进行交互时,可以实现更高程度的解耦。因为事件没有为其使用定义契约,其耦合仅基于事件的数据,而不是任何接口。
例如,日志服务接口可能定义了 logError(String message) 和 logWarning(String messag
超级会员免费看
订阅专栏 解锁全文
86万+

被折叠的 条评论
为什么被折叠?



