当前位置: 首页 > 知识库问答 >
问题:

实现具有优先订阅者和并发修改的事件总线

空枫涟
2023-03-14

我的应用程序有几个部分需要对从其他地方触发的事件做出反应,所以我首先想到的是事件总线。这些是我看到的要求:

  • 订阅者方法应该是类型安全
  • 实现接口(如订阅者

我可能需要的奖金要求:

  • 在处理事件时注册新订阅者
  • 在接收事件时发送事件。在继续当前任务之前,这些将被同步处理
  • 将当前没有订阅者的事件“池”并稍后手动处理它们的选项(可能通过传递消费者)。

除了优先级之外,Guava Eventbus可能做了大部分这些事情。我可以使用TreeSet创建一个简单的优先级订阅者队列,但我不知道如何将其集成到Guava中,我不知道我是否想仅为总线依赖整个库。

另外,我可能需要一个 CopyOnWriteArrayList 来处理并发内容(在迭代时添加/删除),但我不知道性能的影响。在这一点上,一次可能不会超过10-15个订阅者。


共有1个答案

常俊侠
2023-03-14

正常事件并不是被设计成可变的。你应该坚持使用不可变的数据。此外,用户不希望在某个顺序内被呼叫或与另一个顺序交互。对于您的用例,您可以为每个优先级构建不同的事件总线。用户可以将修改的事件的副本移交给下一个优先级总线。

 类似资料:
  • 我正在寻找一种将多个订阅者附加到RxJava可观察流的方法,每个订阅者异步处理发出的事件。 我第一次尝试使用。flatMap(),但这似乎对任何后续订阅服务器都不起作用。所有订阅服务器都在同一线程上处理事件。 最终工作的是通过每次创建一个新的可观察的来消耗新线程中的每个事件: 输出: 以及多个订阅者的最终结果: 输出: 然而,这似乎有点笨拙。有没有更优雅的解决方案,或者RxJava不是一个很好的用

  • 我想用Java实现各种各样的发布者/订阅者模式,但目前已经没有主意了。 有1个发布者和N个订阅者,发布者发布对象,然后每个订阅者需要按照正确的顺序对每个对象进行一次且仅处理一次。发布者和每个订阅者在自己的线程中运行。 在我最初的实现中,每个订阅者都有自己的阻塞队列,发布者将对象放入每个订阅者的队列中。这可以正常工作,但如果任何订阅者的队列已满,发布者将被阻塞。这会导致性能下降,因为每个订阅者处理对

  • 从这个留档: RxJS为JavaScript引入了一个新的Push系统。可观察对象是多个值的生产者,将它们“推送”给观察者(消费者)。 订阅可观察对象类似于调用函数。 要调用可观察对象,我们应该从可观察对象本身调用函数,并将观察者作为可观察对象提供的数据的使用者传递,如: 本文件还说明: 什么是观察者?观察者是被观察者所传递价值的消费者。观察者只是一组回调,每个回调对应于被观察者发送的每种类型的通

  • Node.js应用程序可以使用composer-client.BusinessNetworkConnection.onAPI调用从业务网络订阅事件。事件在业务网络模型文件中定义,并由交易处理函数文件中的指定交易处理。有关发布事件的更多信息,请参阅发布事件。 在你开始之前 在应用程序可以订阅事件之前,你必须定义一些事件和发送它们的交易。还必须部署业务网络,并且必须具有可连接到该业务网络的连接配置文件

  • 本文向大家介绍Jquery 自定义事件实现发布/订阅的简单实例,包括了Jquery 自定义事件实现发布/订阅的简单实例的使用技巧和注意事项,需要的朋友参考一下 Jquery 自定义事件实现发布/订阅的简单实例 以上这篇Jquery 自定义事件实现发布/订阅的简单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 我正在尝试升级贝宝订阅使用Rest API的计划。 https://developer.paypal.com/docs/api/subscriptions/v1/#subscriptions_remission