我必须实现有效的方式来监听java队列,如果队列中有任何消息,那么资源永远不应该是理想的。
例如: 我有队列“MessageQueue”并且有3个消费者正在侦听队列,如果队列有5个消息,那么所有3个消费者应该选择3个消息,如果任何消费者完成第一个消息消费,它应该采取另一个消息没有延迟等等..
此外,我还必须实现优先级排序,具体取决于消息类型。
public class Message {
private int id;
private String message;
private String type;
public Message(int id, String message, String type) {
this.id = id;
this.message = message;
this.type = type;
}
// all getter setters & toString method
....
}
消费者:
public class Consumer implements Runnable {
private final Queue<Message> queue;
public Consumer(Queue<Message> queue) {
this.queue = queue;
}
@Override
public void run() {
while (true) {
try {
consume();
} catch (InterruptedException ex) {
Logger.getLogger(Consumer.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
private void consume() {
while (!queue.isEmpty()) {
Message m = queue.poll();
if (m != null) {
System.out.println("Consumer: " + m.toString());
}
}
}
}
如果队列中有消息,我应该如何确保没有消费者不理想?
我应该如何将多个消费者分配到队列并一次启动它们?
我应该如何按类型确定消息的优先级。 假设只有一个消费者,C1得到了A类消息,如果A类队列中有另一条消息,则应先行。