我想使用 Java 实现各种发布者/订阅者模式,但目前没有想法。
有 1 个发布者和 N 个订阅者,发布者发布对象然后每个订阅者需要以正确的顺序处理每个对象一次且仅一次。发布者和每个订阅者都在自己的线程中运行。
在我最初的实现中,每个订阅者都有自己的阻塞队列,发布者将对象放入每个订阅者的队列中。这可以正常工作,但如果任何订阅者的队列已满,发布者将被阻止。这会导致性能下降,因为每个订阅者在处理对象时花费不同的时间。
然后在另一个实现中,发布者将对象保存在自己的队列中。与该对象一起,AtomicInteger 计数器与它与那里的订阅者数量相关联。然后每个订阅者查看队列并减少计数器,并在计数器达到零时将其从队列中删除。
通过这种方式,发布者不会阻塞,但现在订阅者需要等待对方处理对象,从队列中删除对象,然后才能查看下一个对象。
有没有更好的方法来做到这一点?我认为这应该是一个很常见的模式。