Java嵌套队列
更新: 简言之,我有一个从用户向服务发送消息的队列。 但当一个服务收到1000条消息时,队列就会被 在队列为空之前,it和其他服务不会获取消息。我需要一个解决办法 接近 我的阻止队列有问题。假设我有100个外部服务,我负责向它们传递来自用户的消息 用户->我->第三方 我正在应用程序中使用队列。第三方服务之一不可用时出现问题:Java嵌套队列,java,multithreading,concurrency,java.util.concurrent,Java,Multithreading,Concurrency,Java.util.concurrent,更新: 简言之,我有一个从用户向服务发送消息的队列。 但当一个服务收到1000条消息时,队列就会被 在队列为空之前,it和其他服务不会获取消息。我需要一个解决办法 接近 我的阻止队列有问题。假设我有100个外部服务,我负责向它们传递来自用户的消息 用户->我->第三方 我正在应用程序中使用队列。第三方服务之一不可用时出现问题: 从用户处获取消息,发送给任何第三方。将它们保存在同一队列中,比如Q1 使用队列,识别第三方服务并将其发送给相应的第三方 第三方之一未响应,超时 保存无法传递到DB的消息
- 从用户处获取消息,发送给任何第三方。将它们保存在同一队列中,比如Q1
- 使用队列,识别第三方服务并将其发送给相应的第三方
- 第三方之一未响应,超时
- 保存无法传递到DB的消息
- 定期从DB获取未送达的消息,并将其放入我的Q1中
- 如果第三方获得了大量的流量,比如说5000条消息,这会填满我的队列,而不是其他服务从我那里获得消息,直到这个队列为空为止。但当这个队列为空时,它们将不会获取消息,因为我将再次从DB获取消息并将它们放入队列中,其他服务将再次被阻止
- 使用按服务id嵌套的队列,因此我将一次识别被阻止的服务5000条消息,并将它们保存到DB,而不使用队列中的5000条消息(可能会更多,因为消息将不按顺序排列,它们都与一个队列中的其他服务一起)
使用嵌套的concurret队列(我使用的是BlockingQueue)的效率如何?或者您认为这种情况有更好的解决方案吗?基本上我不想让下线的第三方主宰我的队伍。我需要一种聪明的方法来分离这些队列,可能有数千个队列,因此为每个队列创建一个队列可能效率低下。似乎您使用的是一个BlockingQueue,它为所有第三方服务保留消息 相反
- 对每个第三方服务使用单独的阻塞队列和队列使用者
- 当您从用户处获得消息时,不要将其添加到队列中,而是在那里标识第三方服务本身,并相应地将消息添加到第三方服务特定的阻塞队列中