Установки заказ в приоритет блокирование очереди


У меня есть PriorityBlockingQueue в который я добавляю SocketHolder. И скажем нынешнем датацентре, где этот код работает abcу нас есть три центра обработки данных abc, def и pqr.

private static final PriorityBlockingQueue<SocketHolder> liveQueue = new PriorityBlockingQueue<>();

for (SocketHolder socket : listOfSockets) {
    liveQueue.add(socket);
}

Теперь что мне нужно сделать, это:

  • У меня установки какой-то заказ на liveQueue так что все SocketHolder чей датацентр abc (которая является текущей обработки данных, в котором выполняется код), они должны быть на высоте, так что означает, когда мы извлечем его из этого liveQueue все SocketHolder С abc датацентр должен выйти первым, а потом на всех остальных SocketHolder С другими ДЦ. Аналогично для случаев, когда нынешнем датацентре либо pqr или def.

Это мой SocketHolder класс, который реализует comparable интерфейс и то, что мне нужно делать в моей compareTo способ так, что в верхней части liveQueue (после добавления элементов к нему) у нас есть все SocketHolder чей обработки данных являются нынешнем датацентре и затем последовал другой датацентр, в котором у меня нет приоритета.

Вот как я сделал: прямую ЦОД будет присвоен приоритет 1, а другой ЦОД приоритет 2. Очередь будет обрабатывать самый низкий приоритет первого.

public final class SocketHolder implements Comparable<SocketHolder> {
   private final Socket socket;
   private final Datacenter dc;
   private final Context context;
   private final int priority;

   public SocketHolder(Socket socket, Datacenter dc, Context context) {
      super();
      this.socket = socket;
      this.dc = dc;
      this.context = context;
      this.priority = this.dc.name().equalsIgnoreCase(Utils.CURRENT_DATACENTER.get().name()) ? 1 : 2;
   }

   @Override
   public int compareTo(SocketHolder o) {
       return Integer.compare(this.priority, o.priority);
   }
}

Я хотел увидеть, если это правильный способ сделать это, или есть какой-нибудь лучший способ.



Комментарии