gpt4 book ai didi

java - Java嵌套队列

转载 作者:行者123 更新时间:2023-12-03 13:08:36 26 4
gpt4 key购买 nike

更新:

In short, i have a queue which send messages from user to services. But when one service get 1000s of messages, than queue is dominated by it and other services are not getting messages until queue is empty. I need a solution to this approach.



我的BlockingQueue有问题。可以说我有100项外部服务,我负责向用户传递消息来自用户。

用户->我->第三方。

我在我的应用程序中使用队列。当第三方服务之一不可用时,会发生问题:
  • 从用户到任何第三方的消息。将它们保存在同一队列中,例如Q1。
  • 消费队列,标识第三方服务并将其发送到相应的第三方。
  • 第三方之一无响应,超时。
  • 保存无法将其传递到数据库的消息。
  • 定期从数据库获取未传递的消息,并将其放入我的Q1中。
  • 如果该第三方流量很大,可以说有5000条消息填充了我的队列,而其他服务都无法从我那里获得消息,直到该队列为空。但是,当此队列为空,他们不会得到消息,因为我将再次得到DB的消息,并把它们放在我的队列,其它服务将再次受阻。

  • 到目前为止我一直认为的解决方案:
  • 使用按服务ID嵌套的队列,因此我将立即识别被阻塞的服务5000条消息,并将它们保存到DB中,而不会消耗5000次从队列中消耗消息(可能更多,因为消息顺序不佳,它们全部与其他服务一起使用)一个队列)

  • 使用嵌套的并发队列(我使用BlockingQueue)的效率如何?或者您认为这种情况下有更好的解决方案?基本上,我不想让陷入困境的第三方占据主导地位。而且我需要一种巧妙的方法来分隔这些队列,可能有成千上万个队列,因此为每个队列创建队列可能效率不高。

    最佳答案

    似乎您正在使用单个BlockingQueue来保留所有第三方服务的消息。

    反而,

  • 为每个第三方服务使用单独的阻塞队列和队列使用者
  • 当您从用户那里获得消息时,而不是将其添加到队列中,而是在其中标识第三者服务,并相应地将消息添加到“第三者服务特定的阻止队列”中。
  • 关于java - Java嵌套队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47994976/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com