我的应用程序的几个部分需要对从其他地方触发的事件做出反应,所以我想到的第一件事就是事件总线。这些是我看到的要求:
Subscriber<T>
)不是问题int
)或硬编码的默认优先级进行注册。发布活动时,将按顺序调用订阅者。事件是可变的,他们的一些字段将在订阅者之间改变ConcurrentModificationException
我可能需要的奖金要求:
Consumer
)。TreeSet
创建一个简单的优先订阅者队列,但我不确定如何将其集成到Guava中我不知道我是否只想依赖于整个库公共汽车。
另外,对于并发的东西(迭代时添加/删除)我可能需要CopyOnWriteArrayList
,但我不知道性能影响。在那个问题上,一次可能不会超过10-15个订阅者。
答案 0 :(得分:0)
正常事件不是设计为可变的。你应该坚持使用不可变数据。订阅者也不是要在某个顺序中调用或与另一个订阅者进行交互。 对于您的用例,您可以为每个优先级构建不同的事件总线。订户可以将修改后的事件的副本切换到下一个优先级总线。