我大约有500个线程(假定所有这些线程都称为X),这些线程连续从不同的静态服务接收数据。另外,我有20个线程(假定所有这些线程都称为Y)来接收从其他线程(从X)返回的数据。
我应该使用BlockingQueue还是自定义事件监听器?哪一个更好?
此外,应该没有数据丢失。
答案 0 :(得分:0)
模仿使用 BlockingQueue ,它有一个带有阈值点的队列。发布这一点后,无法再处理更多线程。在一种情况下,当线程(X或Y)(无法再次处理)抛出异常(失败)时,将无法恢复丢失的数据。
但是,自定义事件监听器是一种首选方法,其中可以对所有线程进行确认,并且在线程异常(失败)的情况下,我们可以使用某种重新处理机制来检索丢失的数据。
>可以使用 ReactiveX (可观察)库解决此问题。
答案 1 :(得分:0)
您为什么不尝试消息队列(例如Kafka,rabbitmq) 它们像线程x和Y之间的数据持有者一样工作。 您将数据从x放入队列中,然后通过异步的Y获取/处理数据。
如果我们考虑x 500和y 20的数目,则应该在Event Listener中选择此选项。即使对于x的每个调用,也会有20个调用(假设)。这可能会在重载时成为瓶颈。 / p>
答案 2 :(得分:0)
BlockingQueue更好(通常)。